About the DOS argument: DOS/Windows filesystems do see your files regardless of case, and they can handle them fine. Very old DOS filesystems do not support anything beyond 8.3 filenames, but even FAT32 can handle long filenames. The only problem is that while DOS/Windows filesystems preserve case (in most cases; some flavors discard case for filenames that fit in the 8.3 format), they are not case sensitive when it comes to comparing filenames; Windows considers "foobar", "Foobar", "FOOBAR" and "fOObAr" to be the same filename.
That said, it is mostly a culture thing, but there is some background to it. The reason why this particular convention stuck in the UNIX world is usability. There are two main arguments here:
- Separating words using non-letter characters is better for reading comfort than using casing to mark word boundaries. IfYouDonTBelieveMe, CompareThisSentenceWithThePreviousOneAndTellMeWhichIsEasierToRead. (And of course, novisualseparationatallistheworst).
- Lower-case letters have more varied shapes than upper-case, which in turn leads to more diverse word shapes. THIS MAKES TEXT WRITTEN IN LOWERCASE EASIER TO READ THAN TEXT WRITTEN IN UPPERCASE.
These observations are easy to verify, and they have even been confirmed by scientific research.
In addition, UNIX culture prefers conventions that are not only easy to read, but also easy to write; UNIX hackers are typically people who spend a lot of time using their keyboard, and many use either the official touch-typing system or some personal derivative tweaked for programming. The concept of staying on the home row is important either way, so people like to avoid using keys that cannot be reached from the home row, especially the shift keys.
If you combine these three constraints, there is only really one sensible convention, which is all-lowercase-with-dashes
.