This seems to close off the ability to solve a great many problems at all, though. Even in mathematics isn't it the case that algorithms often have specific corner cases they don't work for, but they are tremendously useful for the vast majority of scenarios? i.e. not all matrices are invertible.<p>And sometimes you can easily identify whether your situation is A or B, and deploy the right algorithm accordingly. Maybe that counts as "working for everything" in the Plan 9 model?<p>It feels hard to navigate this for more complex problems in general. Is it bad to build a PNG decoder that only supports 8 bits per channel? Does a compositor need to support 32 bits-per-channel CMYK backbuffers just because someone might want them? Some people consider rarely-used features to be "Basic functionality" while others consider them obscure corner cases.
This is interesting because in some kinds of software, if you just keep adding features then the software becomes hard to understand and reason about because of the multiplied interactions between features. The software become so heavy that very few people understand it.<p>I think you see this in programming languages themselves. I am not criticising C++ or Rust (they do good work, which I admire) but from my perspective the languages have many features that all interact in tricky ways. An example would be coroutines, threads, async, memory management.<p>There's also social interactions that multiply complexity: see the Python 2 to 3 migration pain that splintered the language for a while. Or Red Hat and its source.<p>I really enjoy this blog post about writing accidentally writing a compiler and handling the permutations of AST Nodes.<p><a href="https://rachit.pl/post/you-have-built-a-compiler/" rel="nofollow">https://rachit.pl/post/you-have-built-a-compiler/</a><p>A billing or invoice system, that should be simple? But it isn't because everything interacts: failed jobs, holidays, daylight saving time, timezones, time, business processes, procedures, edge cases.<p>This is actually a subject that I am investigating as a hobby which is how do you handle interactions between arbitrary behaviours: such as you want a system that is Windows, Linux and Mac and platforms have different semantics that make writing your software tricky.<p>I think type systems get some of the way there but TLA+ and other formal verification tools help us get another part of the way there. But I am still learning.
The tweet cites a google groups post [1]. The title was extracted out of this paragraph from that post:<p><i>On Plan 9, the rule tends to be: if feature(X) can't be implemented in
a way that works for everything, don't do it. No special cases
allowed; it's why mmap is discouraged. This has led to a system that
is quite uniform and a pleasure to use, albeit lower performing than
its competitors in many places.</i><p>[1] <a href="https://groups.google.com/g/comp.os.plan9/c/24mMVoy6wXA/m/JWrrsPUOlmEJ" rel="nofollow">https://groups.google.com/g/comp.os.plan9/c/24mMVoy6wXA/m/JW...</a>
Funny that the thread doesn’t load properly because of black text with black background on safari mobile in dark mode.<p>Maybe dark mode was a bad idea based on that rule indeed.