Open source projects

The vast majority of the python libraries you are going to use during your career are open-source projects. This development model is fundamentally different from proprietary software like Matlab. But what does that mean exactly, and what are the consequences for you as a user? Since "everything has a cost", who pays for the development of open-source libraries? And how can you participate to open source development yourself?

Definition

It is a common misconception to think that the primary purpose of open source software is to be free (of charge, as in "free beer"). In fact, what makes a software open source is its license, which must grant users and peers the rights to study, change, and distribute the software to anyone and for any purpose.

Prominent example of open source softwares are the Linux operating system, the Firefox web browser, the VLC media player, or the CPython language implementation. Open source software may be developed in a collaborative public manner, but it doesn't have to.

Non open source software are often called "closed source". They have a restrictive license and often attempt to hide their code from users and developers. Note that free of charge software might be closed source (in which case they are called "freeware"): a good example of popular freeware is Adobe Acrobat.

The concept of "open" and "closed" source has been applied to many other aspects of society, technology, knowledge or science (e.g. open science).

Licenses

Open source licenses can be roughly classified in three categories: copyleft, permissive, or public domain.

Copyleft licenses grant the right to freely distribute copies and modified versions of a work with the stipulation that the same rights be preserved in derivative works down the line. By using this license, authors want to make sure that their work (and all the derivations of their work) will remain free. Prominent example of copyleft licenses are the GNU General Public License (used by the Linux kernel) or the Creative Commons Share Alike license.

Permissive licenses have less restrictions than copyleft licenses. Often, they warrant acknowledgement of the original authors (attribution), but they allow derivations of the work to be closed source. Supporters of permissive licenses argue that is is "more free" than copyleft licenses. Examples of permissive licenses are the BSD license family, used for example by numpy. The majority of licenses in the python ecosystem are permissive, BSD-like licenses.

Public domain licenses are entirely free: they warrant absolutely no ownership such as copyright, trademark, or patent. A notable example of importnt software in the public domain is the secure hash algorithm SHA-3.

Note that providing code online (on GitHub or elsewhere) without license is not recommended. Even if you don't want to keep any rights on your code, you should add a statement making it clear that your code is in the public domain (and be careful not to violate any copyright in doing so!).

Development and governance

The open source model is a decentralized software-development model that encourages open collaboration. Very often, open source projects originate from a small group of developers and gather further developers as the software grows in recognition and acceptance. At the time of writing (17.06.2018), numpy had 654 contributors, xarray 106, OGGM 12.

The decentralized development model is made possible by platforms like GitHub, which help to organize the discussion and integration of code improvements by the community. In most of the cases, decisions are taken from one or two core maintainers (people with writing permission to the directory). When discussion is needed, a democratic decision process might take place.

Such a development model is not without problems and risks, and the lack of clear governance is probably the major argument that opponents of the open source model put forward when criticizing it. In the next section we discuss some of the consequences of such a model.

Consequences

Advantages:

  • the most obvious advantage of open source projects is that they are available at no cost. This is particularly important for developing countries or small companies / individuals
  • open source increases security: indeed, if many people can review the code the chances to find bugs are higher
  • it isn't dependent on one entity or company: the development can continue even after a company closes
  • freedom of development: since there is no commercial constraint, the code can be developed for ideas, not clients
  • engaging community: new developers are more likely to participate to an open source project (which per definition belongs to anyone) than to a company's product

Disadvantages (from a user perspective):

  • bug fixes or new features can only be taken over by the community, and can take a long time (especially if they are special or hard to implement)
  • the lack of clear long term direction of open source projects can lead to a monolithic, complex project structure
  • the open source community sometimes enjoys freedom too much: this can lead to parallel developments of similar tools/features and unefficient resource management.

The rise in popularity of open source projects like python and R, however, seem to indicate that the open source model is meant to become more frequent in the future.

Participating

You probably didn't know it, but there are many ways in which you can participate to the development of open source source software!

  • reporting bugs is probably the first encounter of many people with the open source development model. And it is an important one! Bugs that are reported can be corrected and are a good indicator of the use of a software library.
  • helping other to solve problems on platforms like github and stackoverflow is another step of open source participation
  • write documentation or tutorials
  • participate to discussions about code improvements
  • propose a bugfix or code improvement
  • donate to open source foundation(s)

What's next?

Now that you are a proficient python programmer, embrace the open source movement!

Back to the table of contents.