I am starting this thread to initiate an onboarding process for open source volunteers to the Pop! project. All of the Pop! projects are open source, and developed exclusively out in the open in public view. Anyone who would like to contribute to the development of Pop! is encouraged to do so, and will see their work deployed on Pop! systems everywhere. Any such works that get accepted and merged into our projects will find their names listed in our weekly Pop! posts. Over time, I will update this post with more information to guide newcomers into the process.
Why
Despite being open source, almost all contributions to the project are by System76's team of engineers. Although to be expected, establishing Pop!_OS as a developer-friendly OS means that we need better resources for encouraging open source contributions and discussions. I feel that the primary blocker for most contributors is likely attaining guidance in getting acquainted with our development workflow, or otherwise making the first to reach out. As a result, this thread will serve as a starting point for many who would like to contribute, but do not know where to start. Hobbyists, students, and professionals alike are all welcome to join the community.
Getting Started
Write a comment here describing your interests and skills, or any questions that you have about our development workflow, and I will respond to help you get started. No one is expected to be an expert to contribute to the project. The capability and desire to learn is the most important skill of all. I may not be available to offer help 24/7, or 7 days a week, but I can guarantee that I will read each post, and get back to anyone who is genuinely interested in contributing to the project.
Contributing as a Tester
Pull requests are opened on a regular basis, and software is continually evolving. Testers are important for discovering issues and providing valuable feedback to aid in replicating and diagnosing their cause. If you are a tester, you can reach out to help reduce the burden on quality assistance by screening pull requests in advance.
Contributing as a Programmer
First and foremost, almost all Pop! software projects are written in Rust. Therefore, familiarity with Rust is vital to contribute to our projects. However, years of experience in Rust are not required. There are very few people today (March 2019) who have a lot of experience in Rust, and more than half of the existing Rust community have been programming in Rust for less than a year. A basic understanding of the language, and an ability to write solutions which compile, are good enough. I can offer guidance to sharpen your Rust programming skills through code reviews, or answer any questions in our official chatroom.
All of our projects are located in our Pop!_OS repository on GitHub. That said, what you see there only scratches the surface in terms of how contributors can join in on the development. We do not write monolithic software projects, and there is a lot of encouragement to strip existing large projects into smaller, manageable pieces. Contributions may not necessarily have to be exclusive to contributing code directly to our projects.
You may find that you'd like to help separate complex functionality into a new crate with a higher quality standalone implementation. Or perhaps you'd like to integrate one of your crates into our projects, provided that they have use in our software. There's a general practice in the Rust community to share as much code as possible with the greater community, and do as little reinventing as required.
Contributions do not have to be towards fixing bugs or implementing new features, either. It may be as simple as refactoring the existing code as you get acquainted with our project. Refactoring is always welcome if the refactored code contributes to easier maintainability or readability. If you find functionality which lacks unit tests, of which there are many such areas, you may contribute unit tests as well. Suggestions are also welcome, as are general bug reports and feature requests.
Contributing as a Community Member
Sometimes the best way to contribute is to simply be around to offer advice and insight. When the community has questions, it's great to have regular members who are around to answer those questions, provide perspectives, and spread knowledge. That reduces the burden on Pop's maintainers and support to tackle every community question that comes by. Help others, and you may find them helping you in the future.
If you are a programmer, working together on community projects is a great way to move the Pop community forward. Software projects which may not necessarily be a part of the Pop desktop, but are useful to the Pop community, are just as important as the core Pop projects. The Pop Planet has a Mattermost API and Mattermost GTK project, for example, which would be useful to every member of the Pop community, including the Pop engineers.
Contributing as a Writer
Documentation is perhaps the single-greatest way to benefit the community as a whole. The success of a Linux distribution; or anything, for that matter; is often attributed to the quality of their documentation and official resources. Imagine what Arch would be like without the Arch Wiki, or Linux itself if the Arch Wiki was not around as a resource. The Linux desktop is dominated equally by open source software development, and the documentation of that software. Actually, documentation may be even more important than the software itself.
All of the documentation on the System76 website is generated from this repository hosted on GitHub. If you know how to write documents in Markdown, you're ready to contribute. Everyone is welcome to improve, discuss, and contribute their own quality articles to our documentation project, and have that work hosted on our website. Similarly, the Pop! Planet has its own mechanisms for documentation in the Wiki, which makes discovery and navigation easier.
Contributing as a Packager
Ubuntu has a feature freeze, but Pops are never frozen, unless they are of the 'sicle variety. If you have a desktop project that would be useful to add to our repository, you're free to request to have your packaging included. If you have a patch for an existing project, feel free to submit an issue to our Pop GitHub repository with your patch, and we can investigate including the patch. We may not be able to accept every request, but the opportunity will always be there. This is a particularly tricky area, however, as packaging comes with the burden of maintaining those packages.
Why
Despite being open source, almost all contributions to the project are by System76's team of engineers. Although to be expected, establishing Pop!_OS as a developer-friendly OS means that we need better resources for encouraging open source contributions and discussions. I feel that the primary blocker for most contributors is likely attaining guidance in getting acquainted with our development workflow, or otherwise making the first to reach out. As a result, this thread will serve as a starting point for many who would like to contribute, but do not know where to start. Hobbyists, students, and professionals alike are all welcome to join the community.
Getting Started
Write a comment here describing your interests and skills, or any questions that you have about our development workflow, and I will respond to help you get started. No one is expected to be an expert to contribute to the project. The capability and desire to learn is the most important skill of all. I may not be available to offer help 24/7, or 7 days a week, but I can guarantee that I will read each post, and get back to anyone who is genuinely interested in contributing to the project.
Contributing as a Tester
Pull requests are opened on a regular basis, and software is continually evolving. Testers are important for discovering issues and providing valuable feedback to aid in replicating and diagnosing their cause. If you are a tester, you can reach out to help reduce the burden on quality assistance by screening pull requests in advance.
Contributing as a Programmer
First and foremost, almost all Pop! software projects are written in Rust. Therefore, familiarity with Rust is vital to contribute to our projects. However, years of experience in Rust are not required. There are very few people today (March 2019) who have a lot of experience in Rust, and more than half of the existing Rust community have been programming in Rust for less than a year. A basic understanding of the language, and an ability to write solutions which compile, are good enough. I can offer guidance to sharpen your Rust programming skills through code reviews, or answer any questions in our official chatroom.
All of our projects are located in our Pop!_OS repository on GitHub. That said, what you see there only scratches the surface in terms of how contributors can join in on the development. We do not write monolithic software projects, and there is a lot of encouragement to strip existing large projects into smaller, manageable pieces. Contributions may not necessarily have to be exclusive to contributing code directly to our projects.
You may find that you'd like to help separate complex functionality into a new crate with a higher quality standalone implementation. Or perhaps you'd like to integrate one of your crates into our projects, provided that they have use in our software. There's a general practice in the Rust community to share as much code as possible with the greater community, and do as little reinventing as required.
Contributions do not have to be towards fixing bugs or implementing new features, either. It may be as simple as refactoring the existing code as you get acquainted with our project. Refactoring is always welcome if the refactored code contributes to easier maintainability or readability. If you find functionality which lacks unit tests, of which there are many such areas, you may contribute unit tests as well. Suggestions are also welcome, as are general bug reports and feature requests.
Contributing as a Community Member
Sometimes the best way to contribute is to simply be around to offer advice and insight. When the community has questions, it's great to have regular members who are around to answer those questions, provide perspectives, and spread knowledge. That reduces the burden on Pop's maintainers and support to tackle every community question that comes by. Help others, and you may find them helping you in the future.
If you are a programmer, working together on community projects is a great way to move the Pop community forward. Software projects which may not necessarily be a part of the Pop desktop, but are useful to the Pop community, are just as important as the core Pop projects. The Pop Planet has a Mattermost API and Mattermost GTK project, for example, which would be useful to every member of the Pop community, including the Pop engineers.
Contributing as a Writer
Documentation is perhaps the single-greatest way to benefit the community as a whole. The success of a Linux distribution; or anything, for that matter; is often attributed to the quality of their documentation and official resources. Imagine what Arch would be like without the Arch Wiki, or Linux itself if the Arch Wiki was not around as a resource. The Linux desktop is dominated equally by open source software development, and the documentation of that software. Actually, documentation may be even more important than the software itself.
All of the documentation on the System76 website is generated from this repository hosted on GitHub. If you know how to write documents in Markdown, you're ready to contribute. Everyone is welcome to improve, discuss, and contribute their own quality articles to our documentation project, and have that work hosted on our website. Similarly, the Pop! Planet has its own mechanisms for documentation in the Wiki, which makes discovery and navigation easier.
Contributing as a Packager
Ubuntu has a feature freeze, but Pops are never frozen, unless they are of the 'sicle variety. If you have a desktop project that would be useful to add to our repository, you're free to request to have your packaging included. If you have a patch for an existing project, feel free to submit an issue to our Pop GitHub repository with your patch, and we can investigate including the patch. We may not be able to accept every request, but the opportunity will always be there. This is a particularly tricky area, however, as packaging comes with the burden of maintaining those packages.