sleeper design bug in the installation layout due to assumptions about filesystem case sensitivity

René J.V. Bertin rjvbertin at gmail.com
Fri Sep 30 09:05:19 UTC 2016


Hello,

I think I've tried to raise some awareness about this already in the past. The issue has come up again among KDE/Mac users, and this time I decided to file a ticket on BKO. Finding the right category wasn't trivial, so I picked what seemed the best compromise and relay it here:

https://bugs.kde.org/show_bug.cgi?id=369554

I don't really know how invasive it would be to address this issue properly, or rather, how to fix this without being overly invasive. Looking at KPeople I see

/opt/local/include/KF5/KPeople/KPeople/Widgets/Actions
/opt/local/include/KF5/KPeople/kpeople/widgets/actions.h

which means that on a case-insensitive-but-preserving FS (HFS, NTFS) you can end up with 4 different situations:

/opt/local/include/KF5/KPeople/kpeople/widgets/{Actions,actions.h}
/opt/local/include/KF5/KPeople/KPeople/widgets/{Actions,actions.h}
/opt/local/include/KF5/KPeople/kpeople/Widgets/{Actions,actions.h}
/opt/local/include/KF5/KPeople/KPeople/Widgets/{Actions,actions.h}

and that's presuming that the case preservations works reliably. Transfer such a tree via a FAT32 thumbdrive and all bets are off. Evidently that's less likely to happen with a headerfile directory (and just shouldn't be done) but I'm concerned that the underlying implicit assumption about the FS has been made elsewhere too. And as I note in the ticket: Mac OS app bundles should support being transferred to and from case-insensitive volumes and still be usable on a case-sensitive volume (idem for KF5 framework bundles if they ever see the light).

The most straightforward fix would be to use only CamelCase OR lowercase header directories, i.e. one of
/opt/local/include/KF5/KPeople/kpeople/widgets/{Actions,actions.h}
/opt/local/include/KF5/KPeople/KPeople/Widgets/{Actions,actions.h}

This is also what Qt5 does, and one can presume they have seen a lot more testing of this approach on many more platforms.
NB: one could create the appropriate symlinks when installing to a case-sensitive FS, but evidently that makes it impossible to copy the result to a case-insensitive FS.

I realise that doing this is an invasive change that requires patching lots of dependent code, and even if those patches could be generated automatically the patched code would then no longer build against older versions of the frameworks. Still, it'd be an almost perfect way to force people to look for other places where the assumption about FS case-sensitivity could lead to problems.

R


More information about the Kde-frameworks-devel mailing list