Collaborative development
In free software projects there is a culture of working in public eye, as this facilitates the conditions that make them technically and financially sustainable. Increasing the flow of resources to projects is in the interest of all projects, and it involves:
-
Increasing the number of people and institutions that use the software.
-
Encouraging any user, whether a person or an organisation, to participate in the project in any way they can, by contributing to the source code, testing, corrections, funding, dissemination, translations and so on.
Outside this model, which is based on fostering collaboration, it is very difficult to reap some of the potential benefits offered by free software, including:
-
Transparency. There is no need to restrict this to the software code. If there is to be real collaboration, transparency has to extend to all the communication infrastructure, knowledge and decision-making involved in the project.
-
Dissemination of knowledge. In contrast to other, classical business models, the interest here lies in knowledge of the product, even the most technical details, being distributed as widely as possible. That reduces the technological risk and the City Council’s dependency on specific companies.
-
Community participation. This reinforces both the project, with more ideas and resources, and the local communities.
Working in public eye means the following elements should be publicly accessible in free formats (for reading) to anyone who is interested, so they do not have to use private tools and can do so anonymously (without having to register with any web service or much less having to hire for-payment services):
-
The code repository.
-
The issue manager or bug tracker (where, among other things, defects or bugs are notified and managed).
-
Design documents.
-
User documentation.
-
The communication channels through which the technical team make technical decisions.
Working in public eye does NOT (necessarily) mean that:
-
Project outsiders have write access to the repository (they are free to copy the code into their own repository and modify their copy).
-
Everyone has permission to write notifications of defects and intervene in the issue manager. Each project can choose its own QA policy.
-
The project team has to read and respond to all defect notifications (if they are open to writing) and questions via the public communication channels.
-
The project team has to check all the suggestions and contributions (pull requests and patches) they might receive, if it is felt the resources are better invested in another task.
Work in the public eye from day one
A really important aspect to bear in mind is the longer you work in a closed, private environment, the more difficult it will be to open it up later on. If you wait too long, maybe some measures will never be implemented, because their cost would be prohibitive. The reasons for that can be summed up as follows:
-
Having public communication channels from day 1 does not mean “strangers” have to distract us from day 1. In this Guide we explain how to make it clear what our commitments are, what we can achieve at each stage.
-
It is impossible to compensate the incentives that developers have for doing things in a “quick and dirty” way, with future threats of publication. If we do not work in public eye from the start, we will inevitably incur a technological debt with the intention of fixing things in the future (that never comes).
-
When the day for “freeing the code” arrives, you suddenly find you have:
-
Specific user settings and passwords in the repository.
-
Notifications of defects that contain sensitive information that cannot be made public.
-
Correspondence between developers which mixes useful technical information with personal opinions that were not expressed so everybody could read them.
-
Dependence on software components that cannot be used in a free software project, or which generate licence problems.
-
Documentation or build procedures written with proprietary tools that do not allow them to be published.
-
(And a never-ending list of other things).
-
Publishing the code means having to take difficult decisions, which would not have arisen if it had been in public eye from the start (wasting time cleaning up the defect log vs creating a new one and losing the entire log, etc.).
It creates a big “publication milestone” which poses a high risk for the project, because lots of changes have to be made all at once. The whole project and its potential vulnerabilities are also exposed in one go (and many eyes will be looking, not always with good intentions). This creates uncertainty and concern before the event. Afterwards, it could cause an avalanche of issues that in normal conditions would have been staggered.
All these points are amply justified in sections “Be Open From Day One” and “Being Open Source From Day One is Especially Important for Government Projects” from the book “Producing Open Source Software”, which the people in charge of each project would do well to read.
The measures and recommendations that should be borne in mind with regard to freeing the code are spread throughout the Guide, tagged as Day1
.
They are all listed in the following table:
ID | Title | Type | Tags |
---|---|---|---|
A_D4F |
Link the main repository to a public issue manager |
Alternative |
Day1; Adaptation; Plugin; NewProduct; Publication |
M_F25 |
Upload a |
Measure |
Day1; Plugin; NewProduct; Publication |
M_4F5 |
Publish brief Developer Guidelines |
Measure |
Day1; Plugin; NewProduct; Publication |
R_368 |
Link the main repository to a free software continuous integration system. |
Recommendation |
Day1; Adaptation; Plugin; NewProduct; Publication |
M_97E |
Upload the licence text to the main repository |
Measure |
Day1; Plugin; NewProduct; Publication |
M_A60 |
Create the main repository in the City Council GitHub public software forge |
Measure |
Day1; Adaptation; Plugin; NewProduct; Publication |
M_A63 |
Use the GitHub main repository web interface as the project development website |
Measure |
Day1; Plugin; NewProduct; Publication |
M_35A |
Link the main repository to a public issue manager |
Measure |
Day1; Adaptation; Plugin; NewProduct; Publication |
R_2D5 |
Reserve a permanent project URL and always use it to refer to the project |
Recommendation |
Day1; Integration; Plugin; NewProduct; Publication |
Implement and document build and installation procedures with widely used free tools |
Measure |
Day1; Plugin; NewProduct; Publication |
|
M_CC5 |
Upload a file with installation instructions to the main repository |
Measure |
Freeing software that was proprietary
The City Council owns the copyright of a lot of code that was not provided under a free software license, and it is therefore proprietary software.
This section addresses those issues that specifically affect the public release under a free license of software components that were not delivered as free software, and in most cases developed without public distribution in mind.