Writing the Free Code of Knowledge
"Software" is a word as uninspiring as it is uninspired. Software is commodity or product: industralized, packaged, opaque. The very term makes any talk about freedom or social justice sound preposterous: surely the world has greater problems than "software" could ever solve.
I have no illusions of displacing a word so deeply entrenched in society and commerce. Still, I prefer the word code. Lawrence Lessig observed that software, in the digital age, acts like legal code; it defines the boundaries of social interactions mediated through technology. For any code of social relevance, those who create it should not merely be called "software writers" or "programmers"; they are coders. And within the community of coders, a strange subculture has evolved. They refer to their work as "free software" or "open source". Many of them have compelling ethical motives. They want to create code that can be changed by anyone, code that can be rewritten freely to be adapted to particular needs, code that can be shared at no cost. Code that is free. Code that gives freedom.
Let us call these coders Free Coders. They have created Linux, Apache, Firefox, OpenOffice.org, and tens of thousands of lesser known projects. Many Free Coders are volunteers, some are paid. Most coders I know would love to be Free Coders. Like artists and writers, they want their work to be shared. But, through their employment, many can only ever be "software developers."
Free Code is as important to modern society as civil codes were to the enlightenment. Without it, rights can be taken away without recourse. Without it, a rich culture of decentralized innovation is impossible. Without it, many are excluded from an Age of Abundance by few who seek to impose artificial scarcity. Free Code is the indispensable support layer of Free Culture.
I am a Free Coder. One of the pieces of Free Code I have contributed to is called MediaWiki; it is the code that I am using to write this very article. It is the code that has allowed the largest encyclopedia in human history to be written, Wikipedia. It is code that is used by thousands of individuals, corporations, non-profits, educational institutions. It is code that allows knowledge communities to grow and thrive.
In the movement for free knowledge and free learning, MediaWiki occupies a space as important as the Linux kernel. To take this movement beyond the limits of our imagination, we must nurture a thriving ecosystem of coders. Our codebase should be modular and extensible, useful to all who have a need and the creativity to fill it. At the same time, the core MediaWiki engine should facilitate decentralized deployment and semantically rich content, using a standardized data format. It must interface with other code for authoring, collaboration, and eLearning, by implementing open APIs and open exchange formats.
I do not know whether we will best achieve these goals by rewriting our codebase, or by evolving it step by step -- this is one of the questions we must answer. I do know that we have barely scratched the surface of online collaboration and interaction. Contributing to eLearning materials should require almost no thinking about the how and only about the what; it should, at the same time, allow those who do care about the how to dig deeply, to modify, to expand.
Our code should bring human beings together and even permit them to work together simultaneously, to chat, to share and annotate multimedia. The code used by learners (whether part of MediaWiki or separate) should adapt to their learning behavior and select resources that are likely to be most effective to serve their needs. Learners should be involved in the development of learning materials, rather than being passive consumers. These processes will greatly benefit from a flexible approach to content versioning, where we do not only have a linear history of a resource, but branches that can be developed separately and merged or updated almost automatically.
The code must allow for contributors in all languages to participate, and to do so, the localization framework should be self-contained, i.e. all components of it should be open to wiki collaboration. Code should be well-documented, structured, and reasonably comprehensible; it should be installable in many different environments, from low end systems to server farms, and scale according to the demands placed upon it.
Code, of course, is not everything. Even Free Code can be used to support unfree societies. Even powerful code does not guarantee thriving communities. Let us not forget that. But let us also not forget that code is law. It does not deserve to be trivialized or ridiculed. We must understand our code. We must make it free. And we must make it as brilliant as the future we want to live in.