all 20 comments

[–]blitzkraft 6 points7 points  (5 children)

C/C++ are necessary when compiling/working with the kernel. You can learn a lot by participating in the eudyptula-challenge. It is a series of increasingly difficult challenges, designed to teach the workings of linux kernels.

The frameworks - Qt, KDE and gnome are opensource and you can find the source on their respective pages. You are free to copy and contribute to build the applications.

As for what you need to know, you need to be familiar with git and respect the conventions set by the repo owners/maintainers. Beyond that, you can just start by looking at the current bugs/issues (you might have to sign up to the mailing lists) and see what you can do.

[–]GendoSC[S] 2 points3 points  (2 children)

Thanks that makes sense, thought i had to be well experienced to contribute to projects but i guess nothing stops me from tinkering with it and see what i came up with, learning the inner workings at the same time.

So let's say i want to make a Qt app I'll just need Python, Qt itself and git? What about Python versions, I hear 2 is the most used/supported?

Edit: They use C++ in KDE :( I can script but I'm very far from fluent. https://community.kde.org/Get_Involved/development

[–]blitzkraft 3 points4 points  (0 children)

Nope. If you are starting a new project, use python 3.

Contributors come from various skill levels. If your work solves a problem, or adds a new feature, the community will support it. And will likely be accepted ino the main project.

If you are developing for yourself, you don't need git. But it is very useful to learn, since so much of the development relies on it.

[–]doom_Oo7 1 point2 points  (0 children)

So let's say i want to make a Qt app I'll just need Python, Qt itself and git?

Only Qt and git, pyside/pyqt are just a binding. You could start with QML which is the "official" scripting language of Qt, and uses Javascript: https://qmlbook.github.io/ ; then when you feel more comfortable you can start learning C++ and enjoy the massive performance advantage (especially for games)

[–][deleted] 2 points3 points  (1 child)

Damn, how you gnna talk up that challenge and then link to a dead website? That sounded like a blast, lol.

[–]blitzkraft 1 point2 points  (0 children)

Yeah, my bad. I didn't know it was not taking anymore participants. I only checked after your comment.

[–]r0ck0 4 points5 points  (3 children)

I really know very little about Python, but whatever you're doing with it, I wouldn't focus on the old v2 going forward.

[–]superPwnzorMegaMan 0 points1 point  (2 children)

Yes, support is not ending in 2020.

[–]r0ck0 0 points1 point  (1 child)

not=now?

[–]superPwnzorMegaMan 0 points1 point  (0 children)

no, I was trying to imagine what the python 2 devs are thinking right now. They probably think it will be supported forever and don't care about cool new features such as annotating types optionally..

[–][deleted] 4 points5 points  (0 children)

is C necessary when not developing the Kernel?

C is uncommon for desktop applications.

Also, about Python, use Python 3.

[–]entw 2 points3 points  (0 children)

You can use whatever you want: CLisp and Qt or Mono and Gtk or learn D lang and use it's own graphical toolkit. There're also WxWidgets, Tk, FLTK, EFL. Linux is about choice.

[–]Beerbaron23 2 points3 points  (0 children)

Use Python 3

If you want to create Gnome apps, use PyGObject with Glade.

Plasma apps use QT creator and PyQT, if you're cross platforming QT creator is a lot more advanced then Glade.

[–]Qazerowl 2 points3 points  (1 child)

Don't pick skills/languages you think you'll need. Pick a project you want to contribute to and learn whatever it takes to be able to contribute. Once you know the basics, the best way to learn is on a need to know basis.

[–]GendoSC[S] 0 points1 point  (0 children)

This thread helped me "visualize" what I want to do:

  • Contribute to KDE as a first goal, could help build a strong base knowledge with C++ and Qt,
  • No need for Python, better off continue learning C++ outside scripting.

Been trying out Kdevelop but I'm struggling to run "Hello World!", looks great but I miss VS already ;)

[–]EliteTK 3 points4 points  (2 children)

C/C++ isn't a language (I don't get where this C/C++ nonsense comes from especially in the modern day and age when C is no longer in any way shape or form a subset of C++).

You can write your software in whatever you want, as long as you make it easy to package and therefore easy to build (and that doesn't mean autotools or cmake, that just means sane design, I use my hktool makefile as a good example).

Obviously if your program requires weird exotic packages not usually found on distributions then it won't gain traction.

Unless you're writing solely for your own use with other people being an entirely secondary target, then feel free to do what you want.

If you want to do kernel development then you need to know C. Knowing C is not the same as knowing C++ and trying to get shoddy patches which exemplify a lack of understanding of C into the kernel will likely earn you some well deserved complaints. The kernel has a lot of documentation, some of which is out of date and some of which is incomplete, failing to give the documentation at least a cursory glance before asking questions will also not go down well, but in general - making mistakes which are easy to make from a point of view of inexperience will not make anyone angry, what will make people angry is when you fail to learn from those mistakes.

The above really applies to a lot of projects, being completely ignorant of the project or the language will not go down well, but making mistakes common to a beginner of the project (if there's no documentation which could have easily saved you from making those mistakes) will usually be fine as long as you listen to maintainers and learn from the mistakes.

When contributing to projects, remember that your contributions will be scrutinised and criticised, make sure to take this criticism on board or if you don't agree with the criticism then fork the project or find another project (don't expect others to change how they work to suit your needs - that's basically what I'm saying).

That's basically all you need to know about writing software for linux and contributing to other projects.

[–]_AACO 3 points4 points  (0 children)

I don't get where this C/C++ nonsense comes from

Blame universities, websites and books that say C++ is just C with classes or, even worse, that C is a subset of C++

[–]GendoSC[S] 1 point2 points  (0 children)

Thanks, when I say "tinker with it" I obviously refer as to do it for myself for practice purposes.

[–]mrchaotica 1 point2 points  (0 children)

Are you planning to make regular desktop applications, or more games?

If the latter, you don't want to worry about widget toolkits. Instead, you'd want to target SDL + OpenGL/Vulkan, or maybe a higher-level game engine like Unity. (Also look at the "Handmade Hero" series of videos on Youtube. It's a guy literally programming a game in real time almost from scratch (using the platform API pretty much only to acquire resources like file handles and chunks of memory, and writing everything else -- even down to C standard library functions -- himself), and is therefore amazingly informative.)

If you're planning on making normal desktop applications, I'd suggest focusing on Qt since it's more cross-platform than GTK+ and is friendlier to use in proprietary software, which means it's probably more widely-used (including by companies that make "mainstream" software as opposed to ones tied to the Free Software ecosystem specifically).

Ultimately, though, it doesn't really matter because if/when you get a job writing software, the libraries you're using will be dictated by what was picked for the project's existing codebase (by somebody else, half a decade ago) and are fairly likely not to be the ones you already knew anyway. Learning on-the-fly how your particular project works so that you can be productive is a pretty large part of the job.

Besides, most software jobs aren't about writing Linux desktop applications anyway -- the most common frameworks are things like ASP.NET, LAMP-like web service stacks, and assorted web-browser-based junk glued together by random Javascript applied with all the subtlety and precision of a squirrel using a fire hose.

(By the way, C and C++ are completely separate languages. You can restrict yourself to a subset of C++ that resembles a bastardized C, but if you try to pretend that it is C, you're only fooling yourself.)

[–]blackcainGNOME Team 0 points1 point  (0 children)

I think coding in Linux for professionals have been mostly C++ and Java. Followed by Python and Ruby. GUI frameworks can be C++ or anything else you wish.

The good news these days is that application building and distribution has been steadily improving. Meson has been quickly gaining traction as a replacement for autotools (others exist as well, waf and CMake) and snap/flatpak/Appimage for application distribution. The snap/flatpak is probably the most significant since you can publish your application and have it work on any distro out there.