Free software now and in the future can be understood to promote:
- an ethical approach to sharing code and caring for each other
- a pragmatic approach to engineering great software
- an effective way to facilitate cooperation among strangers
Technique is not just about code. And code is not just about writing more code. As free software is often produced by remote team members, one of the main tasks of a free software developer is to keep the line open: to communicate with each other, within the project, but also beyond its limits with other entities committed to the same ecosystem.
Free software works by iteration: start small, make the smallest possible thing that could possibly work, and iterate from there. More code does not mean better code, but a higher probability of bugs. A successful project should aim at minimalism, portability, and reproducibility.
As the project evolves, it should automate its quality assurance, build and packaging processes, so that errors are caught early, and so that the latest release is always improving on the software quality.
Public code and documentation are instrumental in the adoption of a software and attraction of new contributors. Often, a successful community will bring more resources and value to a project than the best possible code.
As a software grows its user base, smaller errors or oversight can have larger consequences. Therefore risk management and legal compliance become more important with more users, especially if the software is used in industry and other legally-binding settings: the software license may claim NO WARRANTY, it’s important to build trust with your users, and avoid catastrophic consequences, such as the regular massive user data leaks seen at larger operators.
Technique implies a milieu, and a responsible developer should embrace it rather than hide behind a screen “just doing code”.
The free software movement started with the premise of user freedom, evolved to embrace excellence in software production and methodologies, and has now reached mainstream acceptance. Meanwhile, as the Internet boomed into a daily part of the lives of half the population of the Earth, the developers culture also evolved to a more mature level, embracing accountability, continuity, interoperability, etc., meeting along the way the shared concerns of the EU for consent, privacy, and digital rights: best technical practices such as the Principle of Least Authority (POLA), privacy-by-default, and privacy-by-design match policy orientations to protect citizen rights.
Today’s — and tomorrow’s — software should embrace EU-protected digital rights to:
- know what personal information exists
- see the actual content of personal information
- rectify false personal information
- audit who accesses and processes personal information and why
- obtain personal information and use it freely
- share or sell personal information to third parties
- remove or delete personal information
Software without users is a fish without water. Here we offer six keywords to keep in mind when addressing your community: accessibility, diversity, inclusion, respect, solidarity, well-being.
In the age of globalization, it becomes clearer that a mono-culture is not going to work, and will fail every time there’s a need to take into account differences. If previous historical periods could make up with ideals and hide the atrocities targeted at an other considered inferior, if we’re to succeed facing the challenges ahead of us, we must embrace among ourselves values that can bring us together despite — or thanks to — our differences, as we’re on board the same spaceship.
It certainly means more work to think about how a diversity of people will use a software created by, and conceived for “the majority”. Yet, it’s a humbling experience to step down from the intellectual elite of software engineering and consider oneself among others, as equals. Making this effort today will transform your direct life experience as it pervades to other aspects of your well-being apart from your work.
Community starts with respect, and the ability to put oneself into another’s shoes: see the world not as it could be, but as it actually is for others, considering not an ideal, but a material condition. From there stems solidarity and from there accessibility, leading to inclusion, and attracting diversity. In the end, well-being has been along all the way.
Art, popular culture, academic research, and free software engineering share the premise that cooperation is desirable, and that we sit on the shoulders of giants that preceded us. In practice, developing free software is already sharing infrastructure.
The advantages of sharing infrastructure, although they may seem to run counter to the notion of growth, are actually its enablers: sharing costs, sharing expertise, avoiding vendor lock-ins, gaining user understanding, and easing response-ability and flexibility.
When creating free software, one should think about how it will complement what exists, rather than how it will beat it. Free software, understood as public digital infrastructure, has the potential to bring Europe beyond surveillance capitalism, and you are part of this adventure.
2019 has seen the beginning-of-the-end of the all gratis Internet. For about 15 years, everything online was marketed as free (as in free beer), and the public perception of this situation led many in the free software movement, including some of NGI0 grantees, to work a lot for pretty much nothing, as they were building a considerable part of the Internet infrastructure without awareness of their pauperized situation. Yet, with this illusion of a gratis Internet, even users of digital services and electronic products seem to have remained stuck in the 1970s, when computer companies did not consider software as valuable.
But even today, the idea of volunteerism continues steering the ideal of an independent digital crowd, abstract from the burdens of matter. Already you can see how absurd that is: nobody would walk into a bakery and pick some bread without paying for the life supporting work of the bakers, unless they’re themselves indigent.
Studies demonstrated that 97% of software dependencies were managed by a single person: what if this person burns out, loses interest, or is hit by a bus? Volunteerism is an enemy of perennity, a clutch on which too many users depend, at the expense of developers’ health, sanity, and their own ability to continue using the software. Only recently the EU started reaching out to the developers of software it depends on to ensure them a better position.
Producing sustainable software implies paying for the work required to write and maintain the code and the necessary infrastructure to support that work. NGI0 is one transitory way to addressing this problem, but remains a drop in the ocean of what’s required to build infrastructure proper. The next section informs about funding opportunities that can bridge the gap until the EU itself, like it does for agriculture or roads, considers software as a valuable public infrastructure.
If free software is to be understood to promote an ethical approach to sharing code and caring for each other, a pragmatic approach to engineering great software, and an effective way to facilitate cooperation among strangers, the following anti-patterns must be avoided.
Coding may be addictive, it brings highly satisfying intellectual pleasure. But you require sleep, exercise, a social life, and proper food. Do not overestimate your power, and do not underestimate others’: delegation is a great way not to burn out. The fine folks at Basecamp understood it early, and they thrive. Read their books!
“Scratching an itch”
If motivation is key to success, individual motivation should come second to solving actual world problems. Don’t waste your talent procrastinating. Instead, realize that Gödel’s incompleteness theorem also applies to individuals: and individual problems are better solved collectively. Maybe scratch someone else’s itch?
The “Benevolent Dictator For Life” (BDFL) and hero coder myths focus on excellence, not on collaboration. The former without the latter burdens the community. Not everyone is a genius coder, let alone a fantastic community leader, and the objective is not to foster a society led by highly specialized egotistic morons.
As soon as computer science became valuable to the market, it was invaded by males who prolonged a culture dismissive of women. It’s not cool to pretend being great when you’re hurting people. Meritocracy and sexism often go hand in hand – and a way to keep among men is to dismiss women’s work, however great it is. If you’re male, learn about your privilege, seriously.