Code and Conscience: Ethics and Responsibility & Open Source Development

12 Dec 2023

In a time when digital innovation is becoming more and more relevant, an important conversation comes up – what is open-source software really about? and, what role does ethics play in software engineering? Have you ever considered the pivotal role open-source software plays in democratizing technology? How do ethical considerations become intertwined with the creation of software systems that underpin critical infrastructures, where failures could have dire consequences? In this essay I attempt to provide some answers to these questions and more, through the lens of Software Engineering.

Open Source Software

“Open source software is software with its source code made available and licensed with specific permissions granting users the freedom to study, modify, and distribute the software to anyone for any purpose.”

The “open” aspect implies transparency and accessibility to the underlying code, enabling users to inspect, modify, and enhance the software according to their needs. Open source software embodies transparency, collaboration, and inclusivity.

Copyright is a temporary monopoly granted by governments to creators, allowing them to control over the distribution of their works. For example, books are covered by copyright for a specific duration, and while you can buy and read a copyrighted book, you are prohibited to distribute copies to others. However, the author gets little say on how the content of the book is used. Similar to books, source code is copyrighted and the author decides to distributed it if they want to.

GPL and Copyleft

The GPL (GNU General Public License) implements Copyleft, aiming to counteract copyright for collaborative software development. Under the GPL, recipients of source code have rights to use, redistribute, and create derivative works with the condition that the source code remains open and is licensed under the GPL. This license leverages copyright law to encourage open collaboration, allowing contributions from anyone but relying on the copyright holder to enforce the GPL. For more information on this, visit this link.

Open Source Development

While open source licensing makes collaborative software development easier, not all projects effectively operate as open source, sometimes failing to engage users and developers. The Prime Directives for Open Source Software Engineering serve as benchmarks to assess a project’s potential success in the open source realm.

These directives emphasize three key aspects: first, the software should accomplish a useful task, prioritizing incremental development to deliver essential functionality early on, ideally within weeks of project initiation and assessed by external users. Secondly, the software must be easily installable and usable by external users, supported by adequate user-level documentation and preferably available in an executable form for convenient access. Lastly, the system should enable external developers to understand and enhance it, requiring developer-level documentation that offers insights into the system’s design and development. Linux is an example of how an open-source project can evolve into a powerful and versatile software solution across various industries and applications.

Verification of meeting these directives cannot be done by the system developer alone but requires assessment by external users and developers, ensuring a project’s potential to thrive within the open source community.

Linux

One notable example of a real-world open-source development is the operating system kernel Linux. Developed by Linus Torvalds in the early 1990s, Linux is a prominent open-source project that has grown into a robust and widely used operating system kernel. Linux is at the core of various operating systems (like Ubuntu, Fedora, and Debian) used in computers, servers, mobile devices, and embedded systems. Its open-source nature has encouraged collaboration among developers worldwide, allowing contributions from individuals, companies, and organizations.

I can see myself using Linux in the future through its numerous programming tools, compilers, and libraries, and development. I can also add to an existing project, given the opportunity to engage with the vast open-source community, and the ability to learn from experienced contributors. And, due to the fact that Linux is widely used in server environments and cloud computing, learning Linux equips developers with skills needed for server-side development, cloud infrastructure management, and deployment of web applications and services.

Ethics in Software Engineering

“The most important thing is not life, but the good life -Socrates”

Ethics is known as the ongoing human pursuit of determining the best way to lead a fulfilling and morally upright life.

As technology is rapidly evolving, the responsibility of tech professionals has become increasingly pivotal. Their innovations drive progress, reshape industries, and influence the way we interact with the world. However, this remarkable influence also brings profound responsibilities.

Software engineering is deeply interconnected with ethical considerations. While traditional cases of engineering ethics often spotlight catastrophic incidents in fields like civil or mechanical engineering, software engineers have significant responsibilities to ethics as software created becomes integral to critical real-world systems. Failure of these systems can result in life or death situations, for example, the way bridges are built. Computer systems calculate expected load, geophysical strain, material strength, and design resilience. Faults in these kinds of software can result in real world danger to the public.

Professional ethics

It is imperative that professionals who serve the public have a sense of personal ethics as well as professional ethics. How do your personal ethical standards (such as honesty, integrity, compassion, and fairness) apply to your line of work? Being an honest person is good – but what does honesty look like as a software engineer? This is why developing a professional code of ethics is extremely important.

ACM Code of Ethics

The Association of Computer Machinery (ACM) has outlined the essences of ethical conduct in computing. It holds honesty, integrity, and accountability, as its foundational pillars, emphasizing the responsibility of professionals to contribute positively to society while avoiding harm. This moral compass urges individuals within the computing realm to be conscious of the far-reaching consequences of their actions and decisions. It prompts them to weigh the impact of technology on diverse communities, ensuring that innovation serves the greater good without compromising ethical standards.

Computing professionals are entrusted with upholding the dignity and credibility of their profession. This involves a commitment to honesty regarding qualifications, a dedication to providing accurate information, and the acknowledgment of accountability for one’s work. By adhering to these principles, professionals cultivate trust and credibility, fostering an environment where integrity is the cornerstone of every technological endeavor. Moreover, the ACM Code places significant emphasis on the ethical dimensions of decision-making. It highlights the necessity of considering various factors and potential consequences when making choices. Computing professionals are encouraged to exercise objectivity, transparency, and fairness in their decision-making processes, acknowledging limitations and striving to mitigate risks. This approach fosters a culture of ethical discernment, ensuring that technology is developed and deployed with careful consideration of its societal impacts.

Privacy, security, and intellectual property rights are also crucial elements of the ACM Code. Professionals are tasked with safeguarding individuals’ privacy, securing data, and respecting intellectual property. In an era marked by extensive data collection and technological advancements, this responsibility gains paramount importance. Upholding these principles ensures that personal information remains confidential, systems are protected against breaches, and intellectual creations are respected and protected.

Beyond Professional Ethics

Ethical procedures reach far beyond software engineering and bleed into personal life, and vice versa. It is my belief that personal and professional ethics go hand in hand, and you cannot have one without the other. Furthermore, they are relevant in every project a software engineer will have and is a crucial part of the projects’ development. There cannot be a successful project or software that contributes to the good of the public without ethical considerations.