<story><title>Fixing Unix Filenames (2012)</title><url>http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html</url></story><parent_chain><item><author>overgard</author><text>I&amp;#x27;m sure most reasonable people would agree that (simple) unicode characters are fine, but what possible use is there for having control characters in a filename, like newline or carriage return? (Or if you&amp;#x27;re really evil, beep). If you remove &amp;quot;special&amp;quot; characters from the filesystem, you also remove a lot of complexity from other parts of the system for dealing with pathological corner cases. It&amp;#x27;s a win for everyone.</text></item><item><author>ketralnis</author><text>Half of these problems are problems with the shell and have nothing to do with the filesystem. The shell is &lt;i&gt;really, really, really bad&lt;/i&gt; about doing things like expanding spaces in filenames or environment variables into separate arguments. Notice that every example here about how it&amp;#x27;s &amp;quot;wrong&amp;quot; is a small shell script that has unexpected behaviour. That&amp;#x27;s mostly because the shell is wrong!&lt;p&gt;&amp;gt; Oh, and don’t display filenames. Filenames could contain control characters that control the terminal (and X-windows), causing nasty side-effects on display&lt;p&gt;That&amp;#x27;s the fault of the terminal, mostly. If it&amp;#x27;s an otherwise &amp;quot;reasonable&amp;quot; name containing, say, encoded unicode, that&amp;#x27;s everyone&amp;#x27;s fault from the filesystem to the terminal to (sometimes) the shell. But the fault is spread out over more than just the fact that the filesystem lets you name files however you like.&lt;p&gt;But now, Linus&amp;#x27; quote there:&lt;p&gt;&amp;gt; &amp;quot;...filesystem people should aim to make &amp;quot;badly written&amp;quot; code &amp;quot;just work&amp;quot; unless people are really really unlucky. Because like it or not, that’s what 99% of all code is... Crying that it’s an application bug is like crying over the speed of light: you should deal with &lt;i&gt;reality&lt;/i&gt;, not what you wish reality was.&amp;quot; — Linus Torvalds, on a slightly different topic (but I like the sentiment) (&lt;a href=&quot;http://lwn.net/Articles/326505/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;lwn.net&amp;#x2F;Articles&amp;#x2F;326505&amp;#x2F;&lt;/a&gt;)&lt;p&gt;speaks to both &amp;quot;sides&amp;quot; here: there are applications in the real world that create filenames with special characters in them. The simplest most obvious of these is the space, but yes, in the real world we have applications that do this. So neither alternate reality (&amp;quot;restrict filesystems&amp;#x27; names&amp;quot; or &amp;quot;keep doing what we&amp;#x27;re doing but have bug-free applications&amp;quot;) exists, so which &amp;quot;reality&amp;quot; are you proposing that we deal with here?</text></item></parent_chain><comment><author>gilgoomesh</author><text>Ignoring the fact that non-terminal users &lt;i&gt;regularly&lt;/i&gt; want spaces, hyphens and newlines in their filenames since they have visual purpose...&lt;p&gt;The argument in favor of newlines is the same argument in favor of spaces in filenames or filenames starting with hyphen: the filesystem should not be restricted by bash and other shell scripts continual confusion between data and instructions. We should fix&amp;#x2F;replace lazy programs, don&amp;#x27;t try to fix lazy programming by neutering the system.&lt;p&gt;I think the correct action should be to design shell scripting languages that are robust about data versus instructions. The lack of robustness in shell scripting languages has been a burden since their inception. Restricting the filesystem won&amp;#x27;t stop problems with shell scripts making the same mistakes on other kinds of data.</text></comment>
<story><title>Fixing Unix Filenames (2012)</title><url>http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html</url></story><parent_chain><item><author>overgard</author><text>I&amp;#x27;m sure most reasonable people would agree that (simple) unicode characters are fine, but what possible use is there for having control characters in a filename, like newline or carriage return? (Or if you&amp;#x27;re really evil, beep). If you remove &amp;quot;special&amp;quot; characters from the filesystem, you also remove a lot of complexity from other parts of the system for dealing with pathological corner cases. It&amp;#x27;s a win for everyone.</text></item><item><author>ketralnis</author><text>Half of these problems are problems with the shell and have nothing to do with the filesystem. The shell is &lt;i&gt;really, really, really bad&lt;/i&gt; about doing things like expanding spaces in filenames or environment variables into separate arguments. Notice that every example here about how it&amp;#x27;s &amp;quot;wrong&amp;quot; is a small shell script that has unexpected behaviour. That&amp;#x27;s mostly because the shell is wrong!&lt;p&gt;&amp;gt; Oh, and don’t display filenames. Filenames could contain control characters that control the terminal (and X-windows), causing nasty side-effects on display&lt;p&gt;That&amp;#x27;s the fault of the terminal, mostly. If it&amp;#x27;s an otherwise &amp;quot;reasonable&amp;quot; name containing, say, encoded unicode, that&amp;#x27;s everyone&amp;#x27;s fault from the filesystem to the terminal to (sometimes) the shell. But the fault is spread out over more than just the fact that the filesystem lets you name files however you like.&lt;p&gt;But now, Linus&amp;#x27; quote there:&lt;p&gt;&amp;gt; &amp;quot;...filesystem people should aim to make &amp;quot;badly written&amp;quot; code &amp;quot;just work&amp;quot; unless people are really really unlucky. Because like it or not, that’s what 99% of all code is... Crying that it’s an application bug is like crying over the speed of light: you should deal with &lt;i&gt;reality&lt;/i&gt;, not what you wish reality was.&amp;quot; — Linus Torvalds, on a slightly different topic (but I like the sentiment) (&lt;a href=&quot;http://lwn.net/Articles/326505/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;lwn.net&amp;#x2F;Articles&amp;#x2F;326505&amp;#x2F;&lt;/a&gt;)&lt;p&gt;speaks to both &amp;quot;sides&amp;quot; here: there are applications in the real world that create filenames with special characters in them. The simplest most obvious of these is the space, but yes, in the real world we have applications that do this. So neither alternate reality (&amp;quot;restrict filesystems&amp;#x27; names&amp;quot; or &amp;quot;keep doing what we&amp;#x27;re doing but have bug-free applications&amp;quot;) exists, so which &amp;quot;reality&amp;quot; are you proposing that we deal with here?</text></item></parent_chain><comment><author>stass</author><text>It&amp;#x27;s not.  Just look at what limitation of such sort lead to in Windows, where each application tries to serialize an otherwise perfectly valid filename into a set of characters allowed in Windows.  Of corse, majority of them never get that right.&lt;p&gt;Unix is tools, not policy.  It&amp;#x27;s what you make of it, and that&amp;#x27;s its beauty.</text></comment>