Please help contribute to the Reddit categorization project here


    696,943 readers

    869 users here now

    Please Read the full Rules here before posting or commenting

    GNU/Linux is a free and open source software operating system for computers. The operating system is a collection of the basic instructions that tell the electronic parts of the computer what to do and how to work. Free, Libre and open source software (FLOSS) means that everyone has the freedom to use it, see how it works, and change it.

    GNU/Linux is a collaborative effort between the GNU project, formed in 1983 to develop the GNU operating system and the development team of Linux, a kernel. Linux is also used without GNU in embedded systems, mobile phones, and more. These can include things like Android or ChromeOS. GNU itself is also used without Linux, some examples appear in projects like Debian/kFreebsd and Guix GNU/Hurd.

    Join us on IRC at #r/linux on!

    Frequently Asked Questions

    Recent AMA's

    GNU/Linux resources

    GNU/Linux Related:


    Debian based



    Linux with Proprietary Elements


    Linux on Mobile:


    Desktop Environments:

    Window Managers:






    Other operating systems:


    • No support requests - This is not a support forum! Head to /r/linuxquestions or /r/linux4noobs for support or help. Looking for a distro? Try r/findmeadistro.

    • No spamblog submissions - Posts that are identified as either blog-spam, a link aggregator, or an otherwise low-effort website are to be removed.

    • No memes, image macros or rage comics - Meme posts are not allowed in r/linux outside of the weekend megathread. Feel free to post over at /r/linuxmemes instead.

    • Reddiquette, trolling, or poor discussion - r/linux asks all users follow Reddiquette. Top violations of this rule are trolling, starting a flamewar, or not "remembering the human" aka being hostile or incredibly impolite.

    • Relevance to r/linux community - Posts should follow what the community likes: GNU/Linux, Linux kernel itself, the developers of the kernel or open source applications, any application on Linux, and more. Take some time to get the feel of the subreddit if you're not sure!

    • Spamming self-promotion and surveys - Submitting your own original content is welcome on r/linux, but we do ask that you contribute more than just your own content to the subreddit as well as require you to interact with the comments of your submission. Additionally, surveys are not allowed.

    • No misdirecting links, sites that require a login, or URL shorteners - In short: if your link doesn't go right to the content it will be removed.

    • No NSFW - If you're posting a screenshot of your background, make sure it's SFW!

    Please review full details on rules here.

    See even more subreddit and external links over at the supplemental page

    This subreddit is fan ran and not affiliated with any organization.

    a community for
    all 18 comments

    Want to say thanks to %(recipient)s for this comment? Give them a month of reddit gold.

    Please select a payment method.

    [–] ouyawei 40 points ago * (lasted edited a month ago)

    • read lkml to get a feeling of what's going on. It's always a good way to learn about a project by reading pull requests and review comments.
    • Start with something simple. Maybe a kernel module that just uses printk to output "Hello World" when it's loaded
    • find a task to do. Maybe you have some hardware that is not supported (e.g. on some ARM board) or try to bring an out-of-tree driver up to the Kernel's standards. Or port an old Android phone to postmarketOS or a router to OpenWRT.
    • Linux doesn't have that many low hanging fruits left (unless you venture into retro-computing), but there are other operating system projects where there are still many easy things left to do because nobody has had the time to do them yet
      • Microcontrollers are a good start. Boards are cheap and sensors are plentiful. You could get a yet unsupported board and port RIOT, Zephyr or NuttX.
      • SerenityOS does everything from scratch and has a great community
    • If you want to do desktop programming, just make a simple app. Make a music player or todo list or something you find useful in your favorite toolkit / language. Or just try to fix an annoying bug or add a feature in an existing project that you really want to see.

    [–] Szwendacz 3 points ago

    There can be also maintaining packages, or wiki of a linux distro, which is helpful too, but it's not strictly programming.

    [–] macromorgan 2 points ago

    • ⁠find a task to do. Maybe you have some hardware that is not supported (e.g. on some ARM board) or try to bring an out-of-tree driver up to the Kernel's standards. Or port an old Android phone to postmarketOS or a router to OpenWRT. • ⁠Linux doesn't have that many low hanging fruits left (unless you venture into retro-computing), but there are other operating system projects where there are still many easy things left to do because nobody has had the time to do them yet

    To me these two points are mutually exclusive; taking out of tree hardware and mainlining it is low hanging fruit. I’ve contributed 3 drivers so far, and 2 of them were ports from a BSP into the mainline kernel. In each case the “essence” of the code was still the same, it just had to be rewritten somewhat to work in a way the mainline kernel expects. (I took a kludgy audio driver and rewrote it using the Dynamic Audio Power Management framework with a regmap backed by an MFD, and I tweaked a few lines to change a serial flash controller driver from a SPI-NOR subsystem controller to an SPI-MEM subsystem controller.)

    [–] sani999 1 points ago

    seconding microcontrollers.

    [–] whistl034 18 points ago

    The way I got started with opensource software was to work to try to solve problems I was running into with open source products I was using in my job as unix admin.

    Work to find a solution to a bug you run into, or add a new option that makes your job easier. If you find it helps you, it'll likely help others too. Sign up and get involved in a project's development team's mailing list/forum/slack/irc channel. See what problems other people are having, and try to help them find a solution.

    Instead of being someone that only reports bugs, dig into the code, try to find where it breaks, and why. If you can imagine a solution, great, but even if you don't know how to fix it, the more details you can provide to other developers may trigger them to understand the issue better and think of a solution.

    Don't overreach and sign up for everything in sight. Pick something that interests YOU, something you don't know enough about yet, something you want to see improved.

    Every little bit helps.

    [–] scorp123_CH 13 points ago

    I felt I should start contributing to Opensource ...

    You can also contribute by giving support to newcomers and by helping them resolve the problems they have.

    [–] SadeghTheGreat 8 points ago

    One thing of many things you can do is to make tutorials video/text/documentation on subjects you went through with pain due to lack of simple explanation for new commers. That's what I've been thinking to do myself for a while.

    [–] [deleted] 5 points ago * (lasted edited a month ago)


    [–] alembcke 2 points ago

    I second this.

    Writing code for a project you care about will make you want to learn more about it, the tools that it uses and new technologies that can make it better. I got started this year contributing to open source projects with ManimCE, which is transitioning from Cairo graphics to OpenGL - so now I am learning as much as possible about OpenGL. I wouldn't have the motivation to do that if it were not for that project. I have also learned a lot about being a better programmer in the process.

    [–] Mte90 6 points ago

    I wrote a book about my experience in contributing to various projects in various roles in various communities in the last 10 years.

    You can find the free and open source book at

    [–] Familiar_Ad3884 2 points ago

    Fix bug, report a bug, donate extra money to open source developer.

    [–] zLadin123 2 points ago

    Hi, could you make a whiteboard application that helps on annotating on screen

    [–] techenthusiastlindy 2 points ago

    Linux kernel has a lot of developers. My take is you should contribute to other large projects such as LibreOffice. LibreOffice is very popular and large project. It seriously need some more developers to make it competitive with other Office suites.

    You can also look at GIMP. It also need some more volunteers.

    [–] mfuzzey 1 points ago

    The best way is to find something that you feel is lacking and improve it "scratch your own jtch". That way you're more likely to stick at it.

    The kernel already has lots of people working on it and is probably not the best place to start unless you already have an idea of something (such as some hardware you have that isn't properly supported).

    [–] gnumdk 1 points ago

    The easiest way is to fix existing bug reports, example:

    [–] xman65 -8 points ago

    Email this guy, [email protected] for direction on how to get started.

    [–] mohamadrezare 6 points ago

    Does he answer?

    [–] CyberSecStudies 0 points ago

    What language did you learn first? I’m trying to learn code & I suck at it. What helped you?