ordem e progresso

Everybody likes "innovation" today. And for the sake of innovation, working pieces of software and well-established standards are sacrificed. Gnome 3 is a good example for seemingly innovative technologies that mainly destroy stuff that used to work well.

However, there is still a lot of place for innvoation which is - unfortunately - often not adressed.

So let me first give you a few examples of things which are not innovative even though often proclaimed.

  • Shiny colored buttons which do sounds and have animations when you click on them ~ This worked under Windows 98 already. This is nothing new.
  • System-wide file search. Also worked under Windows 98.
  • Yet another Widget Toolkit that "embeds" into the L&F of the current system. ~ Mozilla had XUL. Java had AWT. It is good that GTK and Qt are free alternatives that can do this now. Despite, even today many programmers program their own technically bad and optically ephemeral.
  • Yet another portable multimedia system ~ Sorry, but for me, mplayer and VLC are the software of choice when playing and recoding music. mencoder and ffmpeg sometimes come. I haven't seen a good free video editor so far, and the commercial ones cost too much and do not run under linux, which is why I still stick with mencoder.
  • Yet another runtime framework ~ JRE, Unity, Silverlight, Flash. Let them die and improve HTML5 please.
  • Yet another Linux distribution ~ No, we do not need another one. We need a System where everybody easily can write extensions for his special purposes.
  • Yet another apps store ~ The nice thing about distributions was that several pieces of software could share common components. "Apps" as such mostly create their own world, and only interact with each other when necessary. This is not a bad thing in general. Especially when someone has to work with multiple versions of the same software, this can become handy. Still, this is just an extension to the Packaging system of a distro. And not just theory.

So here now some things I would really consider "innovative":

  • So one thing that really gets on my nerves is that there is still no apropriate way of moving single Windows of Programs to another computer via some remote desktop protocol. In theory, all Systems I know have the technology to do this. There are some problems when it comes to keyboard layouts and accessibility extensions, but in theory, I see no problem to create something like that. And there are lots of remote desktop protocols that allow similar things already, especially NX.
  • A VPN that works on all major operating systems, with little configration: You create it, get a key, can request additional pubkeys, and then securely send these pubkeys to the people allowed to access the vpn. I don't see why I need to be a cryptoexpert to create a VPN. SSH is said to be very secure, and is much stronger than a VPN.
  • Fewer restarts on kernel upgrades. There are already things like ksplice and kpatch. Same for library upgrades in general: There shouldn't be a need to restart a daemon completely just because a small part of its library changed. This is hard to achieve, of course. But innovations are supposed to be hard to achieve, otherwise they are just "nice ideas".
  • "Forks" of my system state. I can suspend to disk. Why can't I resume from the same state twice? Like I can do with clones of virtual machines. I see no reason. One could even go further and trigger automatic system snapshots every 30 minutes. And allowing this for single processes or process groups would make it easier for programmers to make backups for the case of a crash.
  • Similar, it should be possible to suspend a process group, and revive it on another computer. At least as long as it is run in some compatibility mode, this should be possible. Of course, several processors differ. Well, it's not easy, but I think it is possible.
  • It's time for a system-wide GC. So many Frameworks use garbage collection, and some of them do it in a very bad way. The System knows when it needs memory, and where it needs it. By defining a protocol such that the kernel can take care about it (or let an userspace driver take care about it), it is probably possible to improve the performance of a system on the whole.
  • It's time for a higher-level ABI. Dynamic libraries should not only save their names, but also the size of their arguments. Maybe even their argument names. They should specify whether they "swallow" memory so one does not have to free it, or you have to take care of the memory to be freed again. There is a hole lot of stuff that could be saved without any relevant overhead. There should furthermore be standards for overloaded functions. A common name-mangling-scheme for example.
  • Why do we bother about window managers so much? This is the 21st century! Hercle! Give me a simple API, make that JavaScript if you really like it most (or make the API portable, even better), and let me tile and style my windows the way I want them to be.
  • Keybindings and keyboard shortcuts really get on my nerves. Why can't we finally put a layer between the scan-codes of the keyboard and the actual program in which we can define shortcuts directly, so the software using it gets commands directly instead of ascii characters and modifier masks? One can define commands like "copy" and "paste", as well as more sophisticated commands for special software inside some namespace, like "emacs.proofgeneral.checkproof", and of course, "keypress" per default. This would provide a more common look-and-feel, and finally remove the disadvantages of having alternative editors like Emacs and VIM.

There is a lot of stuff I could add to this list, but that is what currently comes into my mind. These would be the things that I liked. I am not asking anyone to actually make them. I just ask you tu stop destroying working infrastructure, and if you desperately want to produce something, then do something useful instead.