The demand for software increases exponentially, each piece of software enables more software. As we get more software, we want more and more.
Before I learned to program, all I wanted to create was a few games. Now that I am much more experienced, and have written a lot of code, I now have so many ideas that I’ll probably never be able to implement them all. Even if I never have another idea again… As I implement new things I learn new skills and thus get even more ideas.
Here is a short list of some things I’d like to exist:
A role playing game where you cast magic spells my typing “magic words”. Except the “magic words” are actually a programming language, but you won’t realize you have learned to program until you have gotten good at the game.
video chat that uses facial recognition to animate a virtual puppet with your expressions. If you had eye tracking, you could also animate eye contact. When another participant looks directly at your avatar, you should see them make eye contact, but another participant should see them looking to the side (just like in physical space)
An operating system where every application is downloaded over the network and runs inside a secure sandbox. Like tabs in a web browser, except native, and with fully configurable permissions. Also, like an app-store, but without a central authority that rejects applications they dislike.
An open-source webmail that is as good as gmail.
A system of polyfils so that it’s possible to pipe data from the command line directly into widgets in a web browser. I want to be able to pipe a csv into a graphing application in a browser, even if it’s on another computer. I want to be able to write an HTML file, and push deploy it to a particular mobile device. I want to be able to
tail -fthe status of a check box, and see each update as lines of
falsein my terminal.
A framework for creating arbitrary applications that are highly secure and are p2p, without a central server.
An HTML5 map application that works offline (that can replicate areas of the map)
A 2d drafting application that where you select shapes and can use those shapes to describe new shapes, say, two points can describe a line, or a circle. and a point and a circle can be used to describe a line that passes through the point and is tangential to the circle.
a secure p2p package manager, like npm (used in the os mentioned above)
A text editor that runs in the terminal, but has all the same keyboard shortcuts as notepad (so user interfaces are consistent, and you don’t end up like vim users, accidentally hitting
:wqto send an email)
A system to describe the behavior of FSMs with a regular-expression-like-DSL (regular expressions describe pretty much the same layer of the Chomsky hierarchy as finite state machines, but are much more familiar to application developers) This could be used to verify the correctness of systems that are both async and stateful (something I’ve found very difficult to test)
A pure js implementation of node.js’s crypto module.
Some of these I have started on already. some of these are less ambitious than the others, but all of these would comprise of a considerable number of sub problems, and would also lead to new possibilities, and give me new ideas for new programs to write.
Software does not have a talent drought. The demands for software is increasing faster than new humans are learning to code. Even in just a few decades, most parts of the structure of society have become computer programs. Between the point that photons hit the camera’s detectors to when the jpeg is rendered in your browser, the news is all software. The banking system is all software. The music you listen to is recorded with software, if not made entirely with software.
Yet, despite all this, the quality of most software leads a lot to be desired. If you have had the misfortune to be exposed to the enterprise legacy systems you’ll know what I mean.
The biggest problems facing humanity are really software problems.
Even politics is a software problem. Politicians use spin and scare tactics, instead of making decisions based on objectively measurable data - because there is no software to facilitate the right kind of data gathering and decision making.
A lack of education is a problem, because there we the right kind of educational software.
Currently, humanity stands at a crossroads like never before. Great power and great changes are looming on the horizon - genetic engineering, nano technology. Yet also great dangers - Climate Change, peak oil, and the fact that western governments are getting stupider and more corrupt. We need better software to solve these problems.
The good news is that we have already figured out how to reliable create high quality software. Open Source. Open source has already created all the best Operating Systems, Databases, Programming Languages, and Application Distribution (web browser & virtual machines). The problem is that open source is not yet wildly distributed. Apart from developer tools, most consumer facing or enterprise software is generally not open source.
I think the problem is that there has been no way for consumers to pay for open source. Open source has the illusion of being free - but it’s not. You pay for open source by contributing to open source and by writing new software. The open source community is what anthropologists call a “gift culture”. This happens often when there is an abundance of resources (because of the ever increasing demand for software). Instead of gaining power and respect for what resources you control (such as in a commercial culture), in a gift culture individuals gain respect and status by what they give away. Often, in a gift culture, the most respected individuals are by no means the wealthiest. This is certainly the case in open source!
What we need is a way to turn open source inside out, or at least expose a way for people who do not have technical skills to meaningfully contribute to it. Paying for the software in the traditional way is out of the question. To be able to sell something, you need to have the power to withhold it until you have received the payment. This is impractical with software because it’s so easy to copy. If you want to sell software in a traditional way, you have to add copy protection features, which actually make the software worse! On the app store you can purchase software in single units - but to be able to do that, apple controls the entire ecosystem all the way down to the physical hardware!
But there is one way you can reliably withhold software, and thus effectively demand payment: There is no easy someone non-technical to get software that has not been written yet.
You can’t sell software, but you can sell a promise to write software.
Before software is written is hangs there only as a lingering possibility. It must be mined out of the ether by highly trained monkeys in a process where they drink coffee, stare at screens, and hammer away at some very fancy typewriters. There is pretty much no way to get software that to feed these super-monkeys, or to be one. Being one is a curse as well as a blessing because the rate at which primates can create software is really rather low, not more than a few hundred lines of tested, working code a day on average. It’s totally feasible for one person to grow all the vegetables you need to live, but you could not in your lifetime create all the software one would like to implement.
Fortunately, it’s possible for these monkeys to work in teams. In fact, it’s really quite simple, because they actually work better if they are just let to themselves and given only the most gentle direction. If you try and dictate what they do they’ll only resent you. All that is needed is the right sort of guide to encourage them to communicate in the most effective way, and make it more rewarding for them to work together than to work on their own.
This is essentially what
Over the years, we’ve made pretty good progress in this area,
but this has only increased the insatiable demand for software,
and raised our expectations for software quality and functionality.
We have such need for software that we really need to look for a force multiplier, that increases our ability to create software. We don’t need to find another low hanging fruit, what we need is a ladder.
I have an idea for a ladder. Will be announcing it shortly. Watch this space!
(here it is: feedopensource)