OSDC - Open Source Development Course
In this course, participants will learn and practice how to build, maintain, and contribute to open source projects.
This is primarily a practical course with lots of hands-on assignments.
Why this course?
Both in the industry and in academy use an enormous amount of open source code. Many of these organizations also publish some of the code they write under some OSI approved license.
These projects need development and maintenance work.
These projects often lack testing.
Unfortunately only a small subset of the people know how to contribute to Open Source projects. This is a much needed skill, both in industry and academia.
In addition many small utilities and libraries are developed in research labs and in departments of corporations, but in most cases these projects remain inside the local environment. Even other labs and other development teams don’t know about them and thus they develop their own partial solution for the same problem. This happens because of lack of communication, lack of a common platform to store these projects, lack of practice. The Open Source method taught in this course can help bridge this gap even for in-house proprietary code.
In this course, participants will learn and practice the technology, the culture, the process of contributing to an open source project and using the same knowledge to improve the development practices of their organizations.
Who is this course for?
- People who already have some experience in programming either while working in the industry or during their studies.
- Students of computer sciences, software development, Bachelor or more advanced degree.
Students of biology, chemistry, physics, earth sciences, etc. Masters or more advanced degrees.
- People without any programming background can also participate. They will just have to pick tasks that don’t need programming.
For those interested in programming tasks:
Again, people without programming background will have non-programming tasks.
The focus of the course can and should be different based on the participants. Employees in the industry will have different needs than biology students doing their research who will have different needs than computer science or software engineering students.
During the course participants will learn about the Open Source development process and Agile methodologies. They will have the opportunity to get involved in various open source projects and practice the methodologies.
For university students this can help a lot during their studies, for example by fixing issues they encounter in open source packages they use in their research. It will enable them, if your organization agrees, to publish some of the code they develop as open source packages. It will also help those who would like to move on to the industry by teaching them some of the tools that are used there.
The course will include some presentations, and a lot of hands-on work. The hands-on work will include a few artificial examples designed to get the basics, but the majority will be on real projects.
- Background of Open Source and Free Software (history, philosophy, motivation, licenses, value).
- Git: Working with Git (add, commit, log, diff, stash, reset, branch, merge, rebase, bisect).
- GitHub: clone, pull, push, fork, pull-request.
- GitHub Issues: opening issues, bug reports, comments, following, etc.
- GitHub Pages: Creating a web site for taking notes, documenting knowledge.
- GitHub Actions: Setting Up CI, collecting data, generating web pages.
- Markdown (GitHub Pages, comments, etc.)
- Some understanding of HTML and CSS
- Using Slack for communication.
Using Docker to limit the impact of external code on our system.
- Finding an open source project to contribute to.
- Learn reading and understanding code written by other developers.
- Refactoring code.
- Testing: Running test, writing tests, test coverage.
- Static code analyzers, linters, prettifies.
- Generating HTML from the documentation.
- Commenting on each-others pull-requests.
- Fixing bugs.
Improving the documentation.
- Optional: GitLab, Jenkins, Jira, Trello (issue tracking, task management)
Format of the course
There might be a few in-person meetings with presentations, but primarily presentations will be in Zoom and they will be also recorded for people who cannot attend. The idea is to allow asynchronous learning and working. Similar to what happens in the Open Source world.
Length of the course
It is planned that this course will be given throughout a semester of roughly 13 weeks.
Expected workload is roughly 5 hours / week, but it might depend a lot on the background of each participant.
Similar to other skills-courses, the more practice will bring better results.
Grading, in cases where it is relevant, is based on the work done during the course. There is no exam or end-of course project.
In the first few sessions you’ll get assignments to work on the open-source projects of your mentor. That way you will get fast feedback to your work. After that we’ll start to contribute to other open source projects as well.
- Course overview
- Why contribute to Open Source?
- What can be a contribution?
- Why use version control?
- Sending a Pull-request to the repo of the course using only the GUI of GitHub. Adding a JSON file with some personal data of the participant.
- Short explanation about the GitHub Acttions and the verification process in our system.
- Finding the branch and updating the pull-request after the checks fail.
- Blog post on DEV.to, introduction to Markdown.
- Structure of Git URLs, projects/ organizations/ repos.
- Finding repositories of projects via 3rd party library registries.
- Listing the projects the participants are interested in.
- Learning about the YAML format.
- Collecting data about organization with open source projects and sending pull-requests to the Open Source by Organizations project.
- Creating static web site on GitHub pages.
- Create repository for GitHub pages.
- Git on the command line: clone, status, diff, add, commit, push.
- Creating your first coding project
- Create local folder
- git init
- Create empty repository on GitHub
- git push
- Open issue (on the repo of other team-members)
- How to select a project to contribute to?
- How to contribute?
- git: fork, branch, push, remote
- github: sending pull-request
- follow the progress of the original repo
- PyDigger, updating meta data of a Python project
- Python dependency management; listing dependencies, fixing version numbers, upgrading, dependabot
- Docker - getting started
- Docker - creating an image
- Docker compose
- GitHub Actions
- on native Operating Systems
- in Docker
- Check out several well-known open source project to see how to contribute to them.
- Participants will be required to maintain a journal of what they learned and what the accomplished. The language of the journal does not matter, but it has to be public.
- Participants will be required to review the work of each other.
- Participants will be required to cooperate.
Additional reading material
Recommended reading material for the participants.
- The Agile Manifesto and the Twelve Principles (available free)
- The Cathedral & the Bazaar by Eric Steven Raymond (available online free or buy)
- Producing Open Source Software by Karl Fogel (available online free or buy)
- The Lean Startup by Eric Ries (buy)
- Open Sources: Voices from the Open Source Revolution (available free or buy)
- The Art Of Community by Jono Bacon (available free or buy)
- Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal (buy)
- Just for Fun: The Story of an Accidental Revolutionary by Linus Torvalds, David Diamond (buy)
- Forge Your Future with Open Source: Build Your Skills. Build Your Network. Build the Future of Technology by VM (Vicky) Brasseur (buy)
- Dealing With Software Collapse by Konrad Hinsen (avilable free or buy)
- Uncurled: Everything I know and learned about running and maintaining Open Source projects for three decades by Daniel Stenberg (available free)
- Brian Fitzgerald
About the instructor
Gabor Szabo has been writing software since 1983, working in the hi-tech industry since 1993, teaching software development since 2000, contributing to open source since 2002. He is the author of the Code Maven web site. Check out his GitHub profile.
What do participants say about the course?
Many thanks, Gabor. It has been a very enriching and enlightening course. I learnt a lot, from new things to strengthening my prior knowledge. The subjects learnt are very important to every programmer, whether an open source developer or not. Your patience is very appreciated as well as your honest will to make your students truly dive into practice. I will definitely recommend your courses and meetups, and attend them when I can. Shuly Avraham