{{Header}} {{title|title= Developer Courses - Become a Developer }} {{#seo: |description=Users sometimes ask how to become a {{project_name_short}} (or Whonix) core developer, and how these skills are learned. There is no single course or book to point to, but this page provides useful pointers and starting points for self-guided study. }} {{selfsupport_mininav}} {{intro| Users sometimes ask how to become a {{project_name_short}} (or Whonix) core developer, meaning someone who helps build and maintain the project itself. How did we learn these skills? There really is no simple answer to this. This page at least tries to provide useful pointers and possible starting points. }} This page is written from the perspective of a project core developer. We're not aware of any formal courses one can take for this specific goal. There also do not seem to be any books that are especially helpful for this exact path. University computer science or operating system development courses may also not be very much on topic. These might still be highly useful, but they may focus more on areas closer to kernel development, meaning development of the low-level core of an operating system. Kernel knowledge is helpful, but the ability to create one's own kernel is not required for maintaining a Linux distribution [https://wiki.debian.org/Derivatives derivative]. To ask, "what is the easiest way to become a Linux distribution developer?" is a bit like asking, "what is the easiest way to become a medical doctor, general practitioner or heart surgeon?" There is no single course or book to point to. Studying to become a doctor often includes tasks such as, "Read this 1000 pages book by yourself and memorize most of it." Doctors often have to learn many things that may not seem immediately required for the specific job they want later. "Why do I really have to learn about all the muscles, nerves, tendons, etc. if I really want to specialize in xyz?" Medical studies contain foundations such as chemistry, pharmacology, and anatomy. If you have a good relationship and enough time for small talk with doctors, you could ask them, "Is there a shortcut to learn your job?" No, there isn't. "Could I learn your job if I sit with you in your clinic for 2 years by observing and imitating you?" Also no, because real cases are too diverse. After 2 years, a patient might show up whose case requires knowledge that was learned earlier during foundational studies. But for medical studies, there is at least a standardized curriculum, which usually depends on the country. Multiple people study it at the same time, professors point out which things to study, tests are performed, and there is an apprenticeship system. And of course, for fully licensed doctors there is a functional business model. If you want to become a Linux derivative developer, there is no standardized curriculum, nobody to tell you exactly which things to learn in which order, and it may be difficult to find an apprenticeship. That said, an apprenticeship is not always required, depending on your preferred way to learn. The business model may also be an issue (see [[Dev/Open Source Business Models]]) unless you attempt to find a job at commercial Linux derivative companies such as Canonical, SUSE or Red Hat. [https://www.linuxfromscratch.org/ Linux From Scratch (LFS)] might be useful. But the website itself may feel a bit counterintuitive at the beginning. The "Read Online" button is probably what you need. It links to [https://www.linuxfromscratch.org/lfs/view/stable-systemd/ Stable LFS systemd]. One may not necessarily need to build LFS completely for oneself. But it seems useful as a replacement for the absence of a formal curriculum. For example, chapter [https://www.linuxfromscratch.org/lfs/view/stable-systemd/chapter03/packages.html All Packages] mentions: {{quotation |quote=Download or otherwise obtain the following packages: }}
Acl Attr Autoconf Automake Bash Bc Binutils Bison ...There is no need to necessarily download and build all of these packages from source code, meaning the human-readable program code used to build software. However, it is probably important that these things begin to catch your interest. What is Acl? What is Attr? Autoconf? Automake? Bash? Bc? Binutils? Bison? Etc.? Using an existing Linux distribution, trying out these tools, and possibly finding useful personal use cases for them may be helpful. There is no need to become an expert in each of these tools. There is also no need to always recall exactly what each of these tools does. This is especially true for tools that are not used for your own use cases, not needed very often, or substituted by another tool. However, it would be good for beginners to at least be able to refer to a short summary of what that tool is about, how to find its homepage, its documentation, its manual page, etc. Then, if it is needed later, one at least knows what it is and how to find it again. Determining the relevance of each tool, and how much knowledge about its use is necessary, is also part of the studies. Courses or books on learning Linux system administration may be helpful if they teach foundations such as how to use a Linux distribution, how to use the command line, and essential [https://en.wikipedia.org/wiki/Shell_script shell scripting], meaning writing small command-line scripts. However, even there, some topics may not be the most effective areas on which to spend one's time. For example, advanced web server configurations or load balancing using kubernetes may have great use cases in professional system administration, but they are absolutely not required knowledge for maintaining a Linux distribution derivative. So even there, drawing the correct conclusions about which areas of study are more or less relevant is important. In conclusion, becoming a Linux distribution derivative developer probably requires self-guided study, strong self-learning skills, and a willingness to proceed without much guidance. It is not straightforward, not guided in any formal way, and will likely take years of study. However, even before those years of study are completed, the skills learned until then can already be useful, and one may already be able to contribute and even become commercially useful.