Junior C dev seeking advice.

About programming and getting involved with Linux Mint development
Forum rules
Topics in this forum are automatically closed 6 months after creation.
Locked
TD15

Junior C dev seeking advice.

Post by TD15 »

Hello there. I was taught the C language in university for 1 year and a half, but never was taught about OS development.

I have a good understanding of programming in C (data types, data structures, functions, pointers, memory managment, sorting algorithms...) and have coded as much as I could during my spare time.

I wonder, what does it take to contribute to linux (or mint)? Is my skill level enough or do I need to submit one of my projects for the maintainers to check my skill level?

If I was proven worthy, is it possible to temporaly work with the mint development team? Or should I improve my skills even more before trying to contribute to Linux?
Last edited by LockBot on Wed Dec 28, 2022 7:16 am, edited 1 time in total.
Reason: Topic automatically closed 6 months after creation. New replies are no longer allowed.
rene
Level 20
Level 20
Posts: 12240
Joined: Sun Mar 27, 2016 6:58 pm

Re: Junior C dev seeking advice.

Post by rene »

Contributing to "linux", as in the kernel, is a matter of subscribing to linux-kernel@vger.kernel.org (watch out; very, very busy) and submitting patches to a relevant maintainer in the field you're working on. Of course, first having an idea of said field would be good, and most successful entries into kernel development happen through people initially scratching a personal itch, improving or creating some piece of kernel-sides functionality. Admittedly that's gotten harder over the years since for example drivers for random, cheap hardware that you may have tend to these days be standard e.g. USB-class drivers that already work well. An archive for linux-kernel exists at https://lore.kernel.org/lkml/ and subscribing is not necessary for contributing but as long as you do not know subjects or people involved...

Contributing to e.g. Mint, which in and of itself is fairly high level, may be more chances for in Python than in C but certainly C-language (or, well, "GTK-language") Mint projects do exist. The advise is to start at https://linuxmint-developer-guide.readt ... en/latest/ and see where that leads you. Again, having an actual itch to scratch would be much advised.
TD15

Re: Junior C dev seeking advice.

Post by TD15 »

I was planning on learning Python this summer.
Does GTK take a long time to learn?
I will look into the link you included. Thanks!
rene
Level 20
Level 20
Posts: 12240
Joined: Sun Mar 27, 2016 6:58 pm

Re: Junior C dev seeking advice.

Post by rene »

Python will be not much of an issue if you know C. Even though it is arguable best/nicest used object-oriented Python supports plain old procedural as a full first-class citizen. Biggest difference will be memory management: in Python you don't do any, instead relying on automatic allocation, and deallocation via garbage collection. To this day one of the more annoying things about learning Python is the Python 2 vs. 3 split, with the web still full of Python 2 references and examples but while canonical Python 3 ways can be fairly different --- and Python 3 is the only thing that you should concentrate on.

GTK as such is not hard to learn but I sort of hate its guts. Layers upon layers of pre-processor magic, own types for any and all, object orientation in a procedural language causing one to keep and explicitly pass around tons of instance-pointers, so on. Vala was an in that sense perhaps once a good idea --- it's at least explicitly layers upon layers of pre-processor magic --- but is dead again. Qt I like better than GTK and even though I don't generally like C++ all that much. It's just that a GUI-framework is one of the few areas in which object-orientation truly and hardly arguably shines, so use a language that's good at it. But Qt is in any case hardly relevant on Mint.

Most/all of the Mint-tools are Python, the XApps and the lower parts of Cinnamon are C or "GTK-C" in that above sense, and I expect freedom for changes or additions to be greatest in the Mint tools; updates to at least some parts of the GNOME3 base from which those lower parts of Cinnamon were once forked are sometimes synced back in and this would imply wanting those bases to not diverge too far. The XApps are supposedly middle-free in that sense.
TD15

Re: Junior C dev seeking advice.

Post by TD15 »

rene wrote: Mon May 31, 2021 11:36 am Python will be not much of an issue if you know C. Even though it is arguable best/nicest used object-oriented Python supports plain old procedural as a full first-class citizen. Biggest difference will be memory management: in Python you don't do any, instead relying on automatic allocation, and deallocation via garbage collection. To this day one of the more annoying things about learning Python is the Python 2 vs. 3 split, with the web still full of Python 2 references and examples but while canonical Python 3 ways can be fairly different --- and Python 3 is the only thing that you should concentrate on.

GTK as such is not hard to learn but I sort of hate its guts. Layers upon layers of pre-processor magic, own types for any and all, object orientation in a procedural language causing one to keep and explicitly pass around tons of instance-pointers, so on. Vala was an in that sense perhaps once a good idea --- it's at least explicitly layers upon layers of pre-processor magic --- but is dead again. Qt I like better than GTK and even though I don't generally like C++ all that much. It's just that a GUI-framework is one of the few areas in which object-orientation truly and hardly arguably shines, so use a language that's good at it. But Qt is in any case hardly relevant on Mint.

Most/all of the Mint-tools are Python, the XApps and the lower parts of Cinnamon are C or "GTK-C" in that above sense, and I expect freedom for changes or additions to be greatest in the Mint tools; updates to at least some parts of the GNOME3 base from which those lower parts of Cinnamon were once forked are sometimes synced back in and this would imply wanting those bases to not diverge too far. The XApps are supposedly middle-free in that sense.
Thanks for the explanation! Is it necessary to use C with GTK? As far as I know using python is possible (maybe not recommended for performance reasons).
Just asking out of curiosity: Is contributing to mint a volunteering act?
Last edited by TD15 on Mon May 31, 2021 1:27 pm, edited 1 time in total.
rene
Level 20
Level 20
Posts: 12240
Joined: Sun Mar 27, 2016 6:58 pm

Re: Junior C dev seeking advice.

Post by rene »

As to GTK needing to be used with C, well no; GTK is written in C but certainly bindings for many other languages exist. In the context of Mint-contributions however that part was about contributing to the C parts. Certainly for example the Mint tools use GTK via Python bindings.
TD15 wrote: Mon May 31, 2021 1:13 pm Just asking out of curiosity: Is contributing to mint a volunteering act?
While making explicit that I am myself not a part of nor contributor to the Mint project meaning that you should allow for someone else to state such with more authority: no, not eventually at the very least. If your contributions would be ongoing and of high quality you'd be considered part of the project for purposes of e.g. sharing in the funds that the project receives through donations.
Last edited by rene on Mon May 31, 2021 1:33 pm, edited 1 time in total.
TD15

Re: Junior C dev seeking advice.

Post by TD15 »

rene wrote: Mon May 31, 2021 1:26 pm While making explicit that I am myself not a part of nor contributor to the Mint project meaning that you should allow for someone else to state such with more authority: no, not eventually at the very least. If your contributions would be ongoing and of high quality you'd be considered part of the project for purposes of e.g. sharing in the funds that the project receives through donations.
Thanks for all the help :)
ikariGendou
Level 1
Level 1
Posts: 8
Joined: Mon Jul 12, 2021 10:24 am
Location: Namekku-sei

Re: Junior C dev seeking advice.

Post by ikariGendou »

Most important: Start with the goal in mind.

Do you want to learn about OS development?
Do you want to work on a kernel?
Do you need experience/resume with coding in C?
Do you just want to collaborate on Linux/Mint for the love of it?
Do you want to learn a new language like Python?

I also studied a lot of C in my university years. I programmed a very simple kernel for managing the resources of a micro controller. In my experience, C is a language closest to hardware. A microwave oven may have some C inside. It is a prettier Assembler. Maybe C was useful to design the Famicom in the 80s. If you wanted to work for Nintendo in 1983, I would recommend C. However, nowadays C# or a specific gaming framework might be more useful for that industry. That is why having the goal in mind first is more important to make a decision.

I will throw a few more wrenches towards you: I have read that Rust is an evolution of C. An improved version. I do not wish to start a war here, but depending on your goals maybe learning Rust can be the right path. It is you who must find a way.

As others mentioned, Linux/Mint has a lot of Python going on. If your passion is collaborating on Mint then learn Python! But I recommend you focus on a career or academic path. If you go the Python route, then really learn and work hard on Python. Do not lose track by language hopping every few months.

This is getting long enough. Feel libre to send me a direct message if you want to talk about languages.
ig

TLDR: Start with the goal in mind!
User avatar
AndyMH
Level 21
Level 21
Posts: 13571
Joined: Fri Mar 04, 2016 5:23 pm
Location: Wiltshire

Re: Junior C dev seeking advice.

Post by AndyMH »

I wonder, what does it take to contribute to linux (or mint)? Is my skill level enough or do I need to submit one of my projects for the maintainers to check my skill level?
Contributing does not necessarily mean kernel development or mint development. Spot a gap in the 'market' for some tool or utility and develop a linux solution. It could be something like a process/requirement that can be done via terminal utilities but requires a lot of linux-fu, so out of reach for newbies - develop a GUI solution. Example - I'm not aware of any GUI linux fan control program, useful to anyone with a laptop. Example 2 - two to three years ago there was no decent GUI image backup solution for linux, there was clonezilla - intimidating for newbies. So I developed foxclone*. Now you have a choice of three, such is life.

Which is a long winded way of saying what has already been said - start with a goal in mind.

* not that I would necessarily recommend it, but written in pascal. Starting fresh, I'd probably concur with previous comments - python.
Thinkcentre M720Q - LM21.3 cinnamon, 4 x T430 - LM21.3 cinnamon, Homebrew desktop i5-8400+GTX1080 Cinnamon 19.0
Locked

Return to “Programming & Development”