A while ago, I posted some thoughts on Linux installing. Just today, I came across this blog post, which covers kindof the same things. The problem that seems to exist now is that there are multiple ways to do things. Not that it’s a bad thing; but there’s no real standard way to do it. Everybody wants to come up with their own way of doing things, as commented on in this article. New tools are fine, but what should be happening is have these new tools simply provide new ways of accessing/modifying information, not as replacements. Why is there a separate service that runs for adding users? That utility has existed ever since UNIX came around. It’s impossible to actually figure out what file is actually being used at any point in time.
This lack of standardization is really killing me here. Just today, I was trying to install gnome-common for some development work, and it put it in /usr/local/share/aclocal. Which is fine, except that the way aclocal is configured on Ubuntu 12.04 it should actually be /usr/share/aclocal. WHY IS THIS DIFFERENT?!
This is, again, where Windows is better. Each program has its own, special folder, typically in Program Files. All the .exes, dlls, images, etc. go in there. It’s essentially a self-contained unit. You have the system registry to tell you information about programs, some variables needed, and where they are. Granted, the system registry is abused quite often.
So, here’s basically what I think needs to happen:
- Programs should have their own folder that they store all of their .so, executables, images, etc in.
- Paths need to be better defined, i.e. where to put something, does it go in /usr, /etc, /local, what? Currently, programs are scattered all over the place, and shared libs also
- The only shared libraries that should go in the shared library folder(i.e. /usr/local/lib ) are actually shared libraries, stuff that is used by more than one program. If you use it only for your program, that goes in your program folder
- There should be some kind of registry. This would probably hold information like where to find something, and would essentially be an extension of environment variables, but for all users. For example, let’s say that you have two different daemons that provide some service. This registry would point at the daemon that you want to use – as long as their APIs are standardized, it shouldn’t matter which one you’re using.
- APIs need to be standardized. There doesn’t seem to be one “true” way to do anything. As we can see, you can use one of several interfaces to do the same task, which all do something slightly different.
Maybe this would be a good time to split off something new from Linux. In addition to doing the above standardization, this is also what I would like to see:
- Get rid of X. Sure, X is fine and all, but maybe Wayland would be better? X is annoying to use, and it was designed for something else than what it is being used for now. Something simpler, with built-in support for modern APIs(such as OpenGL) would be great.
- Get rid of the SysV init interface. Use Upstart instead, completely deprecate it.
- Any new programs and APIs should not replace old programs, such as useradd or usermod. They should simply provide a new way of doing it.
Well, that’s a mostly disorganized post. Braindump complete.