What languages are programs in Ubuntu MATE written in?

Hey guys, Jacob here.

Just got curious, what languages are each apps in Ubuntu MATE written in? And how does the development process work? How are the GUI programmed? etc…

I wanted to know the dev process so that I might make a revision of some apps and commit later.


In MATE most programs I’ve seen are a combination of Python and/or C, relying on GTK for UI.

What this means for development is that you can usually rely on the standard ./configure && make process for compilation. I often use Glade to modify UI elements.

Things like translation/i18n are usually handled at the distro level and so you don’t need to put a lot of thought into those too often.

MATE software maintainers are a friendly and welcoming lot, so I’d like to encourage you to fork, branch, code, commit, and push. The team will be there to help along the way!


Do you know how to start working on an application (for example, caja)? There seems to be codes on GitHub, but as a novice, I have absolutely no idea how to start…

Depends what you mean by “novice”.

If you’re novice at programming, I would suggest starting with Python, write a few simple scripts to get comfortable, then go and dig into a project. The Ubuntu MATE repository has plenty of simple applets written in Python. The best approach I’ve found is to scratch your own itch: find a project that has bugs that you can reproduce, or a feature that you really want added to it. Don’t be afraid to break code, you can always undo/revert it.

When it comes to contributing, here’s how I usually do it:

  1. Go to the repository (e.g. https://github.com/mate-desktop/caja)
  2. Fork the repo (click on the Fork icon on the top right corner)
  3. Clone your fork of the repo locally (git clone [email protected]:vkareh/caja.git)
  4. Once inside the folder, create a new branch (git checkout -b fix-foo-bar-bug)
  5. Code, test, etc (./autogen.sh && make - often there’s build documentation in the README file)
  6. Commit and push your changes (git commit -am "This fixes foo bar" then git push)
  7. Back on github, create a pull request (there will be a button allowing you to do this automatically right after you push)

Now someone else, often the project maintainer, will take a look at your code, test it out, and make recommendations. You go back and forth this way a few times until everyone is happy and then they’ll merge it into the codebase. Sometimes it’ll get rejected - that’s fine and a normal part of the process, maybe try a different approach at coding or work on a different feature/bug.

For the coding/building part, every project is slightly different, but generally speaking you can do this:

  1. go into the project directory and run the configuration command: ./autogen.sh - this configures all the build files for your system. It also tells you if there’s any missing dependencies needed for this program. Once this succeeds, then
  2. Run the build command: make - this actually compiles the program and create an executable, then you can run it.
  3. Run the program. This varies by project. Sometimes you’ll need to install the program to be able to run it (sudo make install). This is usually ok for small scripts and applets, but it can mess up your system if it’s a core component. Sometimes you’ll find the executable directly inside the project directory. Look for a file that wasn’t there, usually named after the project, that is marked as executable (running git status -uall will give you a list of files that were added during the compile phase). Try running it directly from the terminal and see what happens!

Hopefully this helps to steer you in the right direction. Feel free to reach out to with more specific questions, or if there’s a specific project/feature/bug that you’d like to address I can help you get set up. Sometimes it seems daunting, but after you get set up with a project, you’ll start finding it easier and easier to go deeper in the complexity scale :slight_smile:


It would be lovely if you could document your journey here on the forums or in a blog post. It would be a big help for those even more novice than yourself.

Now, a MATE desktop programming mentorship, that would be a dream! Not expecting to be spoon fed, just to be able to rely on regular guidance and one day be able to help maintain our beloved DE.

1 Like

Not a bad thought at all! I know we have the MATE University, but it seems out of date and needs some serious love.

It’s a wiki, so it’d be interesting if we make some sort of call to action to update it at some point :slight_smile:

1 Like

Reading the documentation at http://wiki.mate-desktop.org/university is giving me a good idea of where to start before exploring the code in University. Thanks for the heads up!