Published on

Open Source Software Development: Linux for Developers

Table of Contents

https://learning.edx.org/course/course-v1:LinuxFoundationX+LFD107x+1T2022/home


Introduction

What is OSS?

  • OSS means source code is made available with a license that provides rights to examine, modify and redistribute, without restriction on the user's identity or purpose

  • Two different philosphical strains:

    • Idealistic -> "Free" as in freedom.
    • Pragmatic -> Primary considerations are technical, including faster and better development

Licensing

  • Permissive (such as BSD-licensed software)
  • Restrictive (such as GPL-licensed software)

Proprietary Software

  • Only the owners of the software have full legal access to the source code involved. Access may also be granted to trusted partners who have signed NDAs (closed source)

  • Usually authors are working under a contract

Why use OSS?

Collaborative Development

  • Shared progress means not everyone has to solve the same problems and make the same mistakes.

  • More eyes reviewing code can lead to stronger, and more secure code, although not always the case as OSS is usually underfunded

Security

  • Published code is usually cleaner as it can be embarrassing to show ugly code + coding standards are more prevalent + others need to look at the code

  • No security through obscurity

  • No "Just trust me"

  • Potentially faster bug repair

OSS Licensing and Legal Issues

Restrictive vs Permissive Licensing

  • Restrictive -> Software must remain open (GPL, a copyleft license)

  • Permissive -> Modifications/enhancements do not need to be avaliable publicly.

Public DomainNon-Protective FOSS LicenseProtective FOSS LicenseProprietary LicenseTrade Secret
All rights relinquishedMore rights grantedNeutralMore rights retainedAll rights retained

Choosing a License

  • Switching licenses during the life of the project can be difficult

  • Projects can sometimes mix and match licenses.

    • Certain sections of code can also contain additional provisions

How to Work in OSS Projects

Contributing properly

  • Before contributing, you should:

    • Read the mailing list for the project (if any)
    • Study archives
    • Join a IRC if there is one
    • Understand how contributions are submitted
    • Study previous history
  • Could start off by contributing by testing, finding bugs

  • Questions to ask:

    • Why does this project exist, and why was it started?
    • Has it diverged from its original purpose?
    • Is the community large or small?
    • Any collective or singular governance structure?
    • What kind of license does it adopt, and is there a contributor license agreement before you can start?
  • Contribute small unit-sized bites, not large code dumps

    • Hard to review

Leadership vs Control

  • Projects can fail because:
    • There is insufficient interest
    • Competition from more established projects
    • Poor leadership
    • Not enough developers
    • Insufficient funding

Continuous Integration, Delivery and Deployment

  • Continuous Integration -> Changes are merged into the main branch as soon as possible. Automated builds are run on as many variations of software and hardware as possible

  • Continuous Delivery -> The release process is automated and projects are ready to be delivered to consumers of the build

  • Continuous Deployment -> The product is released to consumers