I see programming as economically similar to scientific research; it is expensive to do, but once done, the marginal cost of reproducing the final product (information: knowledge in one case, programs in another) is negligable. Government funding of researchers is the system which produces most of scientific knowledge. I think the same should be applied to software. I am suggesting that programming become a function of the university system, and that we should have tenured faculty whose promotion is based not on the production of original, interesting knowledge, but rather on the production of useful software code.
Just as the knowledge produced by government funds is freely available for private industry to make use of (at least, it was, until the recent sad trend of universities patenting government-funding discoveries), the code produced should be public domain.
Some details:
- Industry research is allowed, and there's a little bit of it, but most of the fundamental science is done by government-funded work. Similarly, industrial programming would not die out in the proposed system. But underlying libraries and frameworks would often be written by faculty, and made available to all free of charge.
- Note that in scientific research, faculty are given relatively wide discretion on what to work on. The same should be true for programming faculty.
- University faculty already work on free software sometimes. But more often, they develop some great library, publish papers on it, and then the university copyrights it hoping to make a buck renting it to industry. Sometimes, the university succeeds, but more often, the library finds no buyers and languishes. The function of the research ends up being to give an example of what is possible to industry and open-source programmers, who then re-do the work. From the government's point of view, this is a waste of grant money; it would serve the economy better to have the code which was produced actually used.
- In addition, in the present system, academics are rewarded for creative new ideas, not for re-doing old ideas in a slightly more usable fashion. This encourages academics to produce a working prototype, publish, and then move on to the next project, rather than maintain and improve the first project for years in order to make it more usable as a base for other programmers to build upon. By contrast, in the proposed system, academics would be rewarded for writing code that does unexciting, but useful things, rather than useless code with exciting ideas.