This week, Torvalds took to the Linux Kernel Mailing List (LKML) to share his thoughts on a long-standing, controversial idea: case-insensitive file systems. And in classic Linus style, he didn't hold back.
What Happened?
The immediate trigger was a bug discovered in Bcachefs, a relatively new Linux file system that's being prepared for mainstream use.
Developers found that its case-folding support — the part that lets a file system treat "File.txt" and "file.txt" as the same file — was broken. A fix was submitted for Linux 6.15.
On the surface, it sounds like just another routine bug report. But for Torvalds, this wasn't a small technical glitch.
It was a symptom of a much deeper issue that he believes file system developers keep getting wrong.
Linus's Main Argument: Case Folding Shouldn't Exist at All
Torvalds's post wasn't simply about a bug. It was about the idea itself.
In his words:
"Case-insensitive names are horribly wrong, and you shouldn't have done them at all. The problem wasn't the lack of testing, the problem was implementing it in the first place."
His criticism runs deep: trying to "do case-insensitivity right" leads to endless complexity and subtle security problems
He pointed to how Unicode's "ignorable code points" can cause two filenames to appear different to a user, but still be treated as identical by a file system.
For example, ❤ (heart emoji) and ❤️ (heart with a variation selector) are two distinct Unicode characters, but naive case folding might incorrectly treat them as the same.
The first one, ❤, is just a simple black heart. The second one, ❤️, is a combination of the same black heart symbol with a variation selector that causes it to display in red.
Even though both are hearts, they are represented differently in the Unicode system: the black heart has a single code point (U+2764), while the red heart has two code points (U+2764 U+FE0F).
Worse yet, he explained, poorly handled case folding can create serious security vulnerabilities.
Programs that rely on filename checks to prevent access to sensitive directories could be tricked if the file system silently changes the meaning of filenames behind the scenes.
He even referenced two previous kernel commits:
5c26d2f1d3f5: Trying to avoid special casing ignorable characters.231825b2e1ff: Reverting that attempt after realizing the complexity and risks.
A Deeper Philosophy About Systems Design
Behind it, there's an important design philosophy at play: simplicity and correctness are more important than questionable convenience.
Yes, case-insensitive file systems might make life easier for some users. (Think Windows and FAT32.)
But at the cost of introducing complexity, unpredictability, and vulnerabilities, Torvalds argues it's simply not worth it.
And he's baffled that, decades later, file system developers are still trying to "fix" this old mistake rather than leaving it behind:
"It's like they revere the old FAT filesystem so much that they have to recreate it — badly."
Why This Matters
This isn't just inside baseball for kernel developers. The debate touches on broader questions that affect almost every piece of software we use:
- How do you balance user-friendliness with security and technical requirements ?
- When should we reject a feature outright instead of trying endlessly to "make it better"?
It's about protecting users (and developers) from hidden complexity, unexpected bugs, and real-world security threats.
Developers Are Divided on the Issue
The demand for case-insensitive file systems dates back to the early days of Windows (FAT, NTFS) and macOS (HFS+).
For reasons of historical compatibility and user convenience, these systems treat File.txt and file.TXT as the same file.
In contrast, the Linux world has always embraced case sensitivity from the beginning — File.txt and file.txt are considered two completely different files.
In recent years, with the rise of cross-platform development, some Linux file systems (like ext4, F2FS, and Btrfs) have started introducing optional support for case-insensitivity.
However, as Linus pointed out, blindly chasing "compatibility" or "convenience" can easily introduce unexpected security risks:
- Performance Overhead: Implementing case-insensitivity requires more complex indexing and lookup logic.
- Lack of Standardization: Unicode is messy — handling ignorable characters and special cases is extremely tricky.
- Security Risks: Any slight mistake in string matching logic could lead to serious access control failures.
Linus's strong comments quickly sparked reactions from developers, many of whom showed strong support:
"When you're programming, variable names that differ only by case are completely different — it's absolutely important."
"I just ran into a file overwrite issue on Windows because of case-insensitivity. It's a fundamentally broken design."
"The real problem is inconsistency: some areas treat names as case-sensitive, some don't. Honestly, it would be much simpler if everything consistently enforced case sensitivity."
But not everyone agreed. Some developers argued that strict case sensitivity isn't always a good thing.
So, what's your take on this debate?