On Being a Free Software Maintainer

Year is 2013. I learn about a new, alpha-quality project called “GNOME Calendar.” Intriguing.

I like calendars.

“Cool, I’ll track that,” said my younger self. Heavy development was happening at the ui-rework branch. Every day, a few new commits. Pull, build, test. Except one day, no new commits. Nor the next day. Or week. Or month. Or year. I’m disappointed. Didn’t want that project to die. You know…

I like calendars.

“Nope. Not gonna happen,” also said my younger self. Clone, build, fix bugs, send patches. Maintainer’s interest in the project is renewed. We get a new icon, things get serious. We go to a new IRC room (!) and make the first public release of GNOME Calendar.

One year passes, it is now 2015. After contributing for more than a year, Erick made me the de facto GNOME Calendar maintainer ¹. A mix of positive emotions flows: proud of the achievement; excitement for being able to carry on with my ideas for the future of the application; fear, for the weight of the responsibility.

But heck, I am a free software maintainer now.

That was 4 years ago. Time passes, things happen, experience is built. Experience that differs from what I originally expected.

Being a free software maintainer is a funny place to find yourself in. Good things came from it. Bad things too. Also terrible. And weird.

Naturally, there is a strong sense of achievement when you, well, achieve maintainership of a project. Usually, getting there requires a large number of interactions during a long period of time. It means you are trusted. It means you are trustworthy. It means you are skilled enough.

It also usually means stronger community bonds. Getting to know excellent people, that know a lot and are willing to share and mentor and help, is a life-changing experience. There is a huge human value in being surrounded by great people.

For those of us who enjoy coding, hooray! Full plate. Planning releases, coding and doing reviews can be fun too. You will fix problems, find solutions, think and design your code. There is a plethora of problems to fix in this plane of existence, and you have the chance to independently fix a few of them by yourself.

And people. There are good people in this planet. You eventually will receive a thank you email, or you will be paid a coffee. One way or another, people find their way to you.

People really do find their way to you.

See, sometimes the software you maintain, well, it crashes. It may lose someone’s data. Someone may trigger a unique condition inside the code that you never managed to do. These people may get angry, sad, and frustrated ².

And they will find their way to you.

You will be demanded to fix your software. You will be shouted. Sometimes, the line may be crossed, and you will be abused. “How dare you not (use your free time to) fix this ultra high priority bug that is affecting me?” or “This is an absolutely basic feature! How is it not implemented yet (by you on your free time)?!” or even “You made me move to Software Y, and you need to win me back” are going to be realities you will have to face.

You may get emotional about your code. You may feel ashamed of what you did, and do. After all, your code has bugs, there are numerous issues opened at your bug tracker, and people are complaining non-stop. (Oh and, naturally, there will be someone who will try their best to put you down with that.)

At one point, you will look at your issue backlog and feel a subtle despair when realise you won’t ever be able to fix all the bugs.

If you are open to review other people’s contributions, there is a high change you will find challengers disguised as contributors. And your code review will be treated as an intellectual battle between good and evil. And you will need to explain and clarify over and over, and deal with circular logic, and pretty much any tool people might use to win battles instead of improving their code. And that is incredibly tiresome.

You will be told that you need to develop a thick skin. To ignore that, let it go, think positive and don’t pay attention to all the shit that is being thrown at you and why are you so goddamn negative you’re a maintainer for christ sake.

You may not feel the joy of working on what you work anymore. You may want to move on. You may also not do that due to the sense of responsibility that you have to your code, your community, and the people who use your software.

Unfortunately, being a free software maintainer may have a high price to your psychological and emotional health. 

Four years ago, I certainly did not know that.

¹ – And by “maintainer”, I am talking about being an upstream code maintainer, not package maintainer.
² – Rightfully so. Nobody wants to lose their stuff, or have their workflow broken.


Sorry for the silence

It’s been more than 6 months that I do not write in this space. Honestly, that’s the longest period of silence I’ve ever had.

There are various factors that, combined, ended up causing this period of seclusion. Learning about new, massive projects (GNOME Shell, Mutter and GNOME Settings) is one of them. Moving to a new home and marriage is another.

After finishing Masters last year, I have spent the time working with Endless full-time, and dedicating myself to parallel projects, such as Japanese language, music, gardening, and martial arts. It’s being wonderful, but that somehow distracted me from communicating changes to the community.

And for that, my apologies.

I’ll publish a series of blog posts talking about various GNOME-related activities that I’ve been involved since the last update. Hopefully they will be interesting enough.

3.28 Release Party

Last Saturday we celebrated the release of GNOME 3.28. It was a bit late, but happened nonetheless!

release party - 2.18
There were even more people than the previous ones!

And even cooler than that: this was not the only Release Party around! Isaac Ferreira also organized a successful one in Recife, Pernambuco!

GNOME is getting some traction in Brazil again – stay tuned 😉

3.24 Release Party in São Paulo

(English version after the Portuguese one)

Fala galera!

Nesse sábado, dia 15 / abril, teremos uma festinha de lançamento do GNOME 3.24! Sei que está um pouco atrasado, mas é melhor ter uma festa do que nenhuma 🙂

O local: Taverna Medieval, na Vila Mariana. Além de ser um lugar muito divertido (poucos lugares tem hamburgeres chamados e.g. Elfo da Floresta, ou Skyrim) , lá tem opções vegetarianas e veganas – ninguém fica de fora da celebração!

Se você quiser participar: comente aqui e me mande um email (georges.stavracas at gmail.com) com seu nome, para que possamos reservar a mesa com antecedência. Teremos um limite de até 20 pessoas, dado que o lugar não é muito grande.

Se você não puder participar, mas conhecer alguém que possa se interessar, compartilhe a informação 🙂

Este evento também está marcado no Meetup: https://www.meetup.com/pt-BR/GNOME-Hacking-em-Sao-Paulo/

(English version)

Greetings, people!

This Saturday, April 15th, we’re having a GNOME 3.24 Release Party in São Paulo! I know, I know, we’re late, but better late then never 🙂

The place: Medieval Tavern, at Vila Mariana. Not only it’s very funny and cool (few places have burgers called e.g. Elf of the Woods, or Skyrim in Brazil) but it also has strict and ovolacto vegetarian options – nobody will miss the celebration!

If you’re attending: drop a comment here and send me an email (georges.stavracas at gmail.com) with your name, so we can book a table in advance. There is a 20-person limit, since the place isn’t that big.

If you can’t attend, but know someone who might be interested in, share the news 🙂

This event is also available in Meetup: https://www.meetup.com/pt-BR/GNOME-Hacking-em-Sao-Paulo/

About internet comments and agressive communication

These days, an online magazine I follow wrote about a topic I love researching. I saw some fallacious, poisonous comments and inadvertedly tried to reason with the individual that wrote those things.

Worst thing I could possibly have done.

Of course it didn’t work out. Of course the individual tried to use every single mean she or he had to make me feel bad, to make me think I’m worthless, my arguments are a piece of crap, I’m a stupid teenager trying to reason with a god-like creature that she or he is.

That made me think about how we usually run conversations through internet. Because I work with GNOME, a thick skin naturally grew. I eventually have people yelling me “y u keep breaking stuff?” or “stop making this piece of crap” or even “ur product is bad, u offend me by releasing it” (and yes, they’re all real comments). After some time, this kind of thing becomes just background noise which we have to work with every day. I can only think that other contributors faced the same kind of top-notch treatment.

It makes me wonder how did we get in this rotten state where people try to push you down for nothing but a few seconds of selfish, ego-driven pleasure.

Is there anything I can do, right here and right now, to improve this situation? How can I encourage people to have non-violent conversations? How can I create meaningful dialogs in this chaotic place where people exchange bad words as part of their routines?

Extending this to the GNOME community, what can I do individually to make our community an even warmer place where people can develop themselves and find use for their skills? What can I do to make our community the role model of how a tech community should be?

Bad news: I’m not attending GUADEC

… not this year.

A few minutes before finishing my sponsorship email, I received a very annoying and sad news: my University appearently decided – without even asking my schedule – that I’ll make a presentation between August 14-18, otherwise they’ll kick me out.

I was already looking for paçocas (if you’re not aware, they may be the best brazilian popular sweet ever made) and gathering some money to pay out my beer debts with all the great people out there.

But no.

Feaneron is sad this night 😦

GNOME Calendar and Drag n’ Drop

One of the most intuitive ways to interact with an application is reproducing what we do in real life. Applications try to shorten the learning curve by using metaphores of real world objects.

We all know what GNOME Calendar is: a virtual calendar application. As such, using real-life calendars as a reference for it’s UI is mostly a good thing, except that we’d probably have an annoying time moving events around. In this regard, technology can improve what we do.

And that’s why GNOME Calendar now supports dragging and dropping events around.
Aaand… our traditional video:

Oh, did you noticed? Year view is much improved thanks to the awsome work of Isaque, who proved himself an amazing contributor and a good friend. And don’t forget, this summer we have an intern, Vamsi, working on the long wanted Week View.Calendar, just like Nautilus, is in it’s best moment.

Writing a plugin for GNOME To Do – Introduction

I’m starting a small series of posts describing a general how-to on writing plugins for GNOME To Do. The good news: GNOME To Do has a very small API and it’s very easy to build plugins.

Note: I’ll show examples in Python 3, since this might lower the barrier for contributors and it’s a language that I know (and LibPeas supports). If you don’t know what LibPeas is, click here.

A Brief Explanation

Before jumping into code, let’s talk about the internals. GNOME To Do allows developers to extend it in 3 ways: adding UI elements, adding new panels and implementing new data sources.

A data source is pretty much anything that can feed GNOME To Do with data. For example, Evolution-Data-Server is a data source (the default and omnipresent one). A panel is a view displayed by the main window. See below:

The extensible elements of GNOME To Do

Every plugin has a single entry point: GtdActivatable. Plugins must provide an implementation of this interface. I’ll write more about this interface below.


As explained, the entry point of the plugin is GtdActivatable, which will provide the data sources and UI widgets. The definition of this interface can be found here. The following methods should be implemented:

void       activate              (GtdActivatable *activatable);

void       deactivate            (GtdActivatable *activatable);

GList*     get_header_widgets    (GtdActivatable *activatable);

GtkWidget* get_preferences_panel (GtdActivatable *activatable);

GList*     get_panels            (GtdActivatable *activatable);

GList*     get_providers         (GtdActivatable *activatable);

A quick explanation of each one of them:

  • activate: called after the plugin is loaded and everything is set up.
  • deactivate: called after the plugins is unloaded and all the registered data sources and UI elements are removed.
  • get_header_widgets: retrieves a list of widgets, usually buttons, to be added to the headerbar. This can be the hook point for your functionality, for example.
  • get_preferences_panel: if your plugin needs further configuration, you can pass the preferences panel through this method.
  • get_panels: retrieve the list of panels of the plugin. A dedicated blog post will be written about it in the near future.
  • get_providers: retrieves the list of data sources your plugin may provide. GtdProvider is the interface a data source should implement. A dedicated blog post will be written about it in the nearby future.

The next posts will be about the various ways to add functionalities to GNOME To Do. Also, the next posts will demonstrate plugins through examples of various kinds. Stay tuned!

News about GNOME News

Aye, folks! Some time ago, we had some movement regarding the News app. It was so. freaking. cool! Finally a good alternative of the now-dead Google Reader. Time has passed and, with my heart bleeding in sadness, we saw no further development of it.


Following my bad habit of necromancy, I managed to dedicate my whole weekend to work on it. All the work is pushed to a branch – since I’m not the maintainer, I obviously didn’t do it on master branch. The results are exciting.


GNOME News had an implementation of search in it’s engine, but exposed no UI to do that. Well, not anymore:

Captura de tela de 2016-03-07 17-55-36
The new search feature


Starred News

Following the mockups, GNOME News had a non-working implementation of Starred News. It works now:

Captura de tela de 2016-03-07 17-53-05
Star button in the headerbar

Captura de tela de 2016-03-07 17-52-54
Starred news in action

Empty States

Like all GNOME apps, News now has improved feedback when no feeds/starred news/search results are displayed. Check this out:

Captura de tela de 2016-03-07 17-53-37
No feeds added

Captura de tela de 2016-03-07 17-53-59
No search results

Captura de tela de 2016-03-07 17-53-25
No starred news


Now it’s at least in a usable state (well, usable for my needs). Tracker is the data backend for News, takes care of automagically update the feeds. I hope this work is good enought to be merged on master, so everyone can easily test 🙂

Do you have any ideas or suggestions? Don’t hesitate to comment!

GNOME Calendar 3.19.90 was released

Aye folks! This was a very productive cycle for GNOME Calendar, and this release is the result of a hardworked cycle. First of all, the bad news: no DnD support, no Week View, no, no, no!

But why, Mr. Feaneron?

The reason is simple. Sanity.

Behind the scenes

GNOME Calendar is build on top of Evolution-Data-Server, so we don’t need to write an entirely new backend and to guarantee system integration (GNOME Shell uses it to fetch events, for example).

The problem is that EDS is an “[…] unholy mess“, and it reflects on Calendar. No matter how skilled are the engineers behind it, Calendar was reaching a point of messy code. No one likes messy code – it makes newcomers run away, maintainers avoid improvements out of fear of breaking the app, the app dies, no one’s happy.

So I decided to not let it reach this point, and did a major rework and cleanup of Calendar internals. Believe me, it wasn’t easy.

The good thing is that we’ll be able to avoid commits like this and this, and after reworking the internals, fixing long-term, hard bugs was a piece of cake. From now on, Calendar is going the right way (IMHO) and we’ll avoid messy code and obscure paths.

Now, let’s go to the cool things.

An Improved Quick Add Popover

Following the recent trend of “Popovers Everywhere! TM”, the quick add popover just got better. Now, the user can select in which calendar the event will be added without having exit the popover. Long-term plans include adding natural language support, so we’ll be able to extract the location, start & end dates from the event summary.

Captura de tela de 2016-02-16 22-22-10
The new quick add popover


Implementing this popover was a delight after the new rework.

Year View, Restyled

Thanks to the new contributor Isaque Galdino, the year view receive some improvements that made it look so much better! And appearently, he won’t stop soon. Check this out:

Captura de tela de 2016-02-16 22-21-45
The improved year view (check the dots under the days)


Thanks, Isaque! I hope you keep up with your really good work.

Keyboard Shortcuts Window

Last but not least, the brand new shortcuts window:

Captura de tela de 2016-02-16 22-21-29
Most people didn’t know Calendar had so many shortcuts!

And, as the tradition dictates, a cool video of the new version:


A Public Request

Since Calendar received such a major overhaul in it’s gears, I need to make sure it is stable and good enought. So I hereby request that, whoever has the chance, please test Calendar. Thanks!

Any ideas, comments or suggestions? Leave a comment below!