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.