3 ms·
I recently learned that macOS has a (by default) case insensitive filesystem. How does this line up with the certification?
by enricozb 1y ago
I recently learned that macOS has a (by default) case insensitive filesystem. How does this line up with the certification?
- Analemma_ 1y agoThere’s a specific “Unix mode” you have to turn on to be in the compliant state, it’s not the default. Presumably among other changes this puts APFS into case-sensitive mode.
- lapsed_lisper 1y agoI don't know about the Unix certification process itself, but the Single Unix Specification explicitly mentions case-insensitivity among non-conforming file system behaviors that are allowed as extensions (in 2.1.1 item 4, third-to-last bullet): https://pubs.opengroup.org/onlinepubs/9799919799/ https://pubs.opengroup.org/onlinepubs/9799919799/ So a conforming OS has to make case-sensitive file systems available (which MacOS does: you can create case-sensitive HFS or APFS volumes). But I'm not sure if a conforming OS instance (i.e., running system) has to have any case-sensitive mount points, and either way, AFAIK there's no practical and race-free way for a conforming application to detect whether any particular mount point behaves case-sensitively. So I believe that as far as the standard goes, a conforming application might run on a conformingly-extended OS where no portion of the the file namespace behaves case-sensitively. IOW, a conforming application cannot rely on case-sensitivity for file names.
- p_ing 1y agoApple calls out case-sensitivity as a change they made to pass certification. [0] > 3. APFS file systems can be formatted as either case-sensitive or case-insensitive. Always format as case-sensitive for UNIX Conformant behavior. [0] https://www.opengroup.org/csq/repository/noreferences=1&RID=apple%252FCX1%25252F22.html https://www.opengroup.org/csq/repository/noreferences=1&RID=...
- yjftsjthsd-h 1y agoIf they standardize mktemp ( https://www.austingroupbugs.net/view.php?id=1616 https://www.austingroupbugs.net/view.php?id=1616 ) then I think you could just TESTDIR=$(mktemp -d -p ${WHEREVER}) touch ${TESTDIR}/FOO ls ${TESTDIR}/foo && fail