You are here

Planet GNOME

Subscribe to Feed Planet GNOME
Planet GNOME -
Përditësimi: 3 orë 52 min më parë

Daniel García Moreno: GNOME Outreachy 2019

5 orë 52 min më parë
The Outreachy Program

The Outreachy program provides internship to work in Free and Open Source Software. This year I've proposed two projects as part of the GNOME project and we've two interns working for three months, so we'll have a lot of improvements in the following months!

I'll be mentoring these interns, so I will need to spend some time helping them to work on the existing codebase, but it worth it, if this makes more people to collaborate in free software development and if this help us to improve some useful apps.

These two projects are Fractal and the GNOME translation editor. You can take a look to the list of outreachy interns.


Fractal is a gtk client, and I've proposed for this year program to implement a video player in the message list. We've a preview for images, for audio files but nothing for video files.

Sonja Heinze is the one that will be working on this during the next three months. She has been working during the past month in some small issues in Fractal so I'm really sure that she will be able to do great contributions to the project.

Jordan Petridis (alatiera) will be helping in this project as a co-mentor, I don't know a lot about gstreamer, so he'll be really helpful here with the gstreamer and rust.

GNOME translation editor (Gtranslator)

GNOME translation editor (gtranslator) is a simple .po editor. I've proposed to Rework the search and replace dialog. We've right now a simple find/replace modal dialog and I want to modernize the interface to integrate better in the window as a popover.

Priyanka Saggu is the one that will be working on this during the next three months. She has been working on gtranslator during the past month and she has done great contributions and improvements during this time.

Daniel Mustieles is the other co-mentor for this project. He's an experienced GNOME translator so he will help us a lot with the app user experience design and testing.

Gaurav Agrawal: openSUSE Asia Summit 2019, Bali

Dje, 15/12/2019 - 4:21pd

When you travel for the very first time Internationally there are lot of things going in your head. Especially for someone like me, who is a vegetarian and is travelling all alone with no experience of flight. I was a lot nervous, was thinking about the culture of the place I am going, was nervous about flight itself, I watched a lot of “How to save yourselves” videos while travelling in flights.

So, yeah it was pretty messed up.

When, I was boarding the plane, my mom called me in last 10 mins, said news is going on about some “terrorists” entering Delhi (where my flight was), she was really really nervous and at one point I said “Do you want me to leave everything and abort?”, well no

So, yeah a fully nervousness filled journey started, I boarded Singapore Airlines and damn it was A380, my first International flight and that too with a jumbo, I forgot all the things as soon as I entered the plane.

I gotta tell you, from the very start, I started realizing how well humanity can be, air hostess/host were taking so good care of the passengers, I felt so welcome and I guess indebted that my words aren’t just enough.

I mean, I can joke about this and say “At one point it felt like this much care I don’t even get from my parents” 

I was in the flight, slept for a while ( It was midnight flight) , and then it hit me, I saw that crew was up whole the time making sure that we sleep well, I was so touched by this, and I reached out to the crew and talked about this, they were very welcoming and talked about their job and I had a nice talk with them, All of the whole experience was just so nice.

In the end, they reached out to me, and shared a token of gratitude, they gave me “Singapore airlines playing cards and a ball point pen”, with a letter that they enjoyed having me as a passenger. Well, I was not aiming for any gifts or something, I just went to them and asked about their job and appreciated their hard-work genuinely.

I still manage to store this precious memory Hope to see you again Mr. Westwood

I had a layover in Changi Airport, Singapore. And yes it’s absolutely worth the hype on Internet. I mean it’s really high tech, lots of recreational stuff, amazing gardens and you get to see “The Jewel”, also operations wise they do their best!

You will have a good time layover-ing in Singapore :p

Now, until this point, you should have got the idea that how comfortable I would have got so far. Yep!, that’s correct

I reach Bali, it was a 1-1.5 hour flight from Singapore. Comfort was gone … well because I never experienced foreign exchange yet, and I had to reach the hotel somehow. So, I was thinking to myself can I pay online ?, Do I use my ATM ?, Do I buy sim card here ?, Do I exchange few dollars which I got with me here only ? ….. so on… after a lot of nervousness and search in and outside of the airport I exchanged few dollars just slightly above my taxi far and reach my hotel.

Pheww , First test over!

Now, I checked in rested for that day, on 5th October was my conference next day.

Day 1

I reach the venue 1.7 Km away on a sunny day (It was hot) , but foot , well because It did not hit me that moment Motor bike ride app Gojek and Grab exist there.

Here, I was welcomed by the kind volunteers, after few paperwork of attendance, I got my welcome kit

Woah, it was goodylicious

:p There was a bottle too, not in this picture

I then attended few talks, one of them was about creating open source communities in Indonesia where the main focus was on students. Being a student myself I took part in that discussion. Then another one was by Mr. Segitz where from Suse, where he talked about how Suse takes security bugs, how they handle them, critical bugs etc etc..

I asked him about something similar to Android, where you restrict apps based on the permissions, he said it is a good idea and can be discussed. Niel added on about “Flatpak” on this discussion and yeah it’s a good idea Flatpak has those things already :p

I met, Ahmad Haris for the very first time, can;t forget his custom shoes he was showing off that moment :p , he managed to get them done by “FANS” I mean he’s a CEO haha (As per him :p)

I met more GNOME folks there for the very first time, I mean that feeling when you meet the folks behind IRC and chats for the first time. Yeah it was phenomenal, just makes me more excited about upcoming GUADECs. I just want to meet everyone :p

So, there in openSUSE summit, we had a little GNOME world , Ahamad, Kukuh, Rania, Shobha, Rosanna, Neil and others

It was a really great day.

I gotta say, I had doubts about Inodensia culture in general, my stereotypical family was worried because there it was majority of relegion which I do not belong to, and other stuff.

But, to be honest, I have never met such respectful, generous, helpful people in my entire little life that I have met in Indonesia. They are just the best humans out there!

Oh, that’s our little cute “minix” :p (I gave her a nickname) and the University campus was extremely beautiful with a really cool view of the Sea

I met many cool folks from Japan and China openSUSE community!, It’ just gets better and better when you meet folks from around the FOSS world. We all are working for same goal, to make the world a better a place! I have described in my previous GNOME Asia blog already that FOSS can make a huge impact in lives of people. It has tremendous possibilities, and when I personally saw the companies like “FANS” getting value out of it I was stunned and really happy

Day 2

I attended Niel’s talk, and loved how he swept in GNOME education challenge at the end of the talk because yeah the talk got over few minutes early

Then, one of the really amazing talk was by Mr. Takeyama from Japanese community, they are doing a really great job out there to increase Japanese support on the magazing FOSS tools by personally contributing. And the coolest part is they have “Geeko Magazine” published every 6 months where they personally manage all the things. And have cool Japanese styled animation covers too .

He generously gave me a sample, but sadly it does not have a Manga like animated cover , but yeah still a cool stuff to have :p

If you happen to visit Japan and get a chance to attend Comiket festival they do have a stall there grab those before stock gets over (Really Limited)

Credits: My Treasure

When I went back to hotel on the second day, the openSUSE bottle broke , I got sad, really because it was cool. I asked Kukuh that will it be possible to have an extra left and if he can get that in GNOME Asia, and wow to my surprise it worked out and he arranged one for me. Now I have it safe with me

Thanks a lot Kukuh! , means a lot!

My cracked bottle

I am really astonishingly amazed by the great Indonesian People, their culture, their FOSS community specially, how well they manage to organize such beautiful events, and the fact that how linked they are, I mean most of the organizing committee in GNOME Asia and the participants were in openSUSE too

The best part is, even working people take out their time collaborate with the University staff and students and make these amazing events happen.

To be honest I am a bit Jealous of the community there, hope we have that presence in India too

Thank you everyone out there who made this event happen and took care of the participants and speakers! , I would definitely like to give a talk next time there

And for all of you did not make it there, yeah you missed a lot :p

*Note: I would really like to know in the comments if you are interested to know about Bali Tourism, this post got a bit long, if there is a good response I would really love to share the journey


Hope to meet you all back again!

Priyanka Saggu: Outreachy week-2 progress report!

Dje, 15/12/2019 - 1:00pd

December 15, 2019

Task for the week:

  • Try to replicate the gnome-builder “search and replace bar” widget (just the wire-frame) in the Gtranslator project.
    • [sub-task] First try doing the above task in a seperate simple application.

Summary of the week:

It was a really productive week. I am almost done with the current tasks. I’ve finished replicating the wire-frame of gnome-builder’s search-and-replace-bar widget into the libdazzle-example application (although, it’s a complete mess piece of code right now, that I’ll refactor once I see it is actually working). There are a couple (or maybe a couple more) of final nitpicks to do to actually mark these as finished.

At the moment, I am far more comfortable with the project. Nothing seems really alien-sih now, rather most of the stuffs (from the project) looks quite familier (and imparts somewhat proper sense).

Compiling below each day’s progress in brief:

Day 01:

Day 02:

  • Had my first weekly-meeting with danigm. Discussed various standing doubts.
  • Then later in the day, attended the first outreachy zulip chat conversation.

Day 03:

  • Was able to build and isolate the gnome-builder’s development environment properly.
  • Read a couple of blogs from the gnome-builder developers. Thus, explored a couple of new (then unknown) features of the Builder-IDE.
  • Later, also started replicating the search-and-replace-bar widget in the example application.

Day 04:

  • No progress for the day. Wasn’t able to focus much.
  • So, spent most of the time in reading stuffs.

Day 05:

  • Finally succeeded in reverse engineering the gnome-builder’s search_and_replace_bar widgets into its units.
  • This time, started picking up the concerned widget’s source code (for recreation inside libdazzle’s example application), the right way.

Day 06:

  • Done recreating the widget into the example application. Still required to work more on the invoking action.
  • Have started testing the re-created widget files in the gtranslator project as well.

Sébastien Wilmet: Providing GActions in a library

Pre, 13/12/2019 - 7:22md

Yes, it’s possible to provide GActions in a library, to have more code re-use across similar applications (a recurrent topic on this blog and the work that I do in GNOME).

Tepl (Text editor product line) provides GActions in its public API. It’s nothing new, it’s been there since several years, but at the time when I added those GActions in Tepl I remember that I was quite excited with the achievement Let’s take a quick look.

GActions in a library

GAction represents an action that the user can do in an application, it’s usually present in a menu item or a button. It’s not just a function to launch, it’s a little more involved than that.

Overall, providing GActions in a library can be done quite naturally, once the library provides a framework for the application.

TeplApplication and TeplApplicationWindow both provide GActions in their public API. They are namespaced with the "tepl-" prefix, to avoid conflicts with other libraries or the application; so the full name of the GActions are "app.tepl-something" or "win.tepl-something". And all the GActions are documented in the class description.

Note that TeplApplication and TeplApplicationWindow are not subclasses of GtkApplication and GtkApplicationWindow, because several libraries might want to extend those GTK classes and an application needs to be able to use all those extensions at the same time. A nice solution that doesn’t require to hold a new object in the application: use this design pattern that I’ve already described on my blog.

Sharing best-practices

If you know or if you’ve implemented kinda the same in another library, I’m interested to hear about it. To see how it’s handled elsewhere, to have more code examples to be inspired by.

Next topic

Providing GSettings in a library. Done in another project. Topic for a next blog post

Bastien Nocera: Dual-GPU support follow-up: NVIDIA driver support

Pre, 13/12/2019 - 5:13md
If you remember, back in 2016, I did the work to get a “Launch on Discrete GPU” menu item added to application in gnome-shell.

This cycle I worked on adding support for the NVIDIA proprietary driver, so that the menu item shows up, and the right environment variables are used to launch applications on that device.

Tested with another unsupported device...

Behind the scenes

There were a number of problems with the old detection code in switcheroo-control:
- it required the graphics card to use vga_switcheroo in the kernel, which the NVIDIA driver didn't do
- it could support more than 2 GPUs
- and it didn't really actually know which GPU was going to be the “main” one

And, on top of all that, gnome-shell expected the Mesa OpenGL stack to be used, so it only knew the right environment variables to do that, and only for one secondary GPU.

So we've extended switcheroo-control and its API to do all this.

(As a side note, commenters asked me about the KDE support, and how it would integrate, and it turns out that KDE's code just checks for the presence of a file in /sys, which is only present when vga_switcheroo is used. So I would encourage KDE to adopt the switcheroo-control D-Bus API for this)


All this will be available in Fedora 32, using GNOME 3.36 and switcheroo-control 2.0. We might backport this to Fedora 31 after it's been tested, and if there is enough interest.

Michael Meeks: 2019-12-13 Friday.

Pre, 13/12/2019 - 11:35pd
  • Mail chew. Really thrilled to see Kohei' work to significantly improve MDDS performance (the Multi Dimensional Data Structures we use at the core of Calc for many things).
  • Happened to be reading through Carson on Tolerance this morning, and got to this bit: "Democracy remains the best way of making government more or less accountable. Nevertheless ... Democracies can believe falsehoods and do cruel and wicked things.". He argues cogently that having a higher authority, a self-standing ethical yard-stick, capable of questioning and challenging the state is fundamental to human freedom, though highly unwelcome to totalitarians of course. Interestingly one of the goals of TDF's board election processes is assuring that a diversity of views is represented, and that it is hard to exclude voices people may not want to hear.
  • Marketing call.

Michael Meeks: 2019-12-12 Thursday.

Enj, 12/12/2019 - 10:00md
  • Somewhere morning arrived; fixed a floating window crasher, and unwound a convert-to bug: trying to save-as before being fully loaded. Slept for a couple of hours, report writing sync with Javier.
  • Back to review code changes, beat back the admin. Thomas came over for some more interview training.

Alexander Mikhaylenko: GNOME and gestures, Part 3: HdyLeaflet again

Enj, 12/12/2019 - 12:11md

This is part 3 of a mini-series. Part 1, Part 2.

Last time I wrote about adding a back/forward swipe gesture to HdyLeaflet. That work has been finished and is available in libhandy 0.0.12.

Porting apps

To enable the gesture in an application using leaflets, the following needs to be done:

1. Syncing leaflet animation

Currently apps that usie leaflets in both titlebar and content area just change their visible-child or visible-child-name property values synchronously. Libhandy 0.0.12 introduces HdySwipeGroup for this. It takes care of automatically switching children, and also of animating swipes. It’s used similarly to HdyHeaderGroup and GtkSizeGroup:

<object class="HdySwipeGroup"> <swipeables> <swipeable name="title_leaflet"/> <swipeable name="content_leaflet"/> </swipeables> </object> HdySwipeGroup *group; ... group = hdy_swipe_group_new (); hdy_swipe_group_add_swipeable (group, HDY_SWIPEABLE (title_leaflet)); hdy_swipe_group_add_swipeable (group, HDY_SWIPEABLE (content_leaflet)); 2. Marking separators

Leaflets often include separators between pages. By default the gesture will switch to any widget, and the separators should be excluded from that. It can be done using the new allow-visible child property. It’s set to TRUE by default and can be changed like this:

<packing> <property name="allow-visible">False</property> </packing> 3. Enabling the gesture

HdyLeaflet in 0.0.12 has can-swipe-back and can-swipe-forward properties. Setting one or both of them to TRUE enables the gesture:

<property name="can-swipe-back">True</property>

Most of the time, apps will want only back gesture, but it’s possible to have back/forward or forward only if wanted. This should only be done for the content leaflet, and not for the title one. Enabling dragging in headerbar will conflict with window dragging on touchscreens!

4. Transitions

0.0.12 brings some changes to HdyLeaflet mode and child transitions. Separate mode and child transition types have been deprecated in favor of a unified transition-type property. It can take 4 values: none, slide, over, under. Crossfade doesn’t make much sense spatially and was deprecated as well, though it’s still works if used via child-transition-type property. Additionally, over and under transitions have a subtle shadow now, similar to the WebKit gesture.

It’s recommended that the apps using the gesture use over transition.

<property name="transition-type">over</property>

And that’s it! The libhandy commit that adapts the demo app can serve as an example. It also shows that nested swipeable widgets aren’t handled well, and require manual special casing. Most of the time that won’t be an issue though.

Thanks Adrien Plazas for all the reviews :)

Molly de Blanc: Keeping the (server) lights on

Mër, 11/12/2019 - 9:36md

The GNOME project is built by a vibrant community and supported by the GNOME Foundation, a 501(c)(3) nonprofit charity registered in California (USA). The GNOME community has spent more than 20 years creating a free desktop environment designed for the user. We‘re asking you to join us by becoming Friend of GNOME.

The GNOME Foundation manages the technical infrastructure powering GNOME projects. Our Infrastructure Team is led by Andrea Veri and also includes Bartłomiej Piotrowski, working in devops and systems engineering. While Andrea has been with the Foundation for some time, Bart was hired in 2019.

Photo by The National Archives (UK) is licensed under a CC-BY 3.0 License.

Building and maintaining infrastructure for the GNOME project is one of the many activities of the GNOME Foundation, and it’s one of the most important. Building software like the GNOME desktop environment requires a lot of technical support, including managing servers and providing collaboration tools. Since GNOME is focused on being a self-sustaining community, we look as much as possible to managing our own services and software, and making sure it is free and open source.

The GNOME Infrastructure Team currently supports a total of 34 virtual machines hosted on a total of eight bare metal nodes. These virtual machines allow us to run services like the Openshift Container Platform (OSCP), which provides self-service access to the community to run any of their workflows on an automated and containarized fashion.

GNOME is build using self-hosted FOSS. We collaboratively build GNOME using a GitLab instance, which has a total of 15k accounts. We do shared storage using NextCloud. Community discussion is handled over Mailman, Discourse, and MoinMoin. We are currently using Indico and Connfa for our event planning and management.

There are other community-focused services as well, including:

    • internationalization services including localized home pages and translation toolings;
    • mail services for staff and community members;
    • staff mail endpoint for all the GNOME employees and contractors to store their mails on a supported hosting;
    • an IDM solution with more than 2.5k accounts, mirroring infrastructure for the GNOME sources to be available to a place that is closest to where you live for fastest download speeds;
    • Cachet for a dynamically updated Infrastructure Status page; and
    • a Surveys system and several app migrations from virtual machines into containers with a major improvement over maintainability, performance and budget that allowed us to retire unnecessary hypervisors and reduce the costs for the hardware renewals; and
    • a list of tools we offer to the community that keeps increasing year over year.

Additionally, the GNOME builders for the CI/CD processes were fully automated allowing the team to save time putting the system into service whenever a new builder is being donated to the GNOME Foundation.

We have a lot planned for the future. In particular we‘ll be focusing on migrating additional virtual machines into containers on OSCP. The idea is to consolidate and simplify the existing infrastructure even further to reduce maintenance and costs but at the same time offer the community the toolings they need in order for the GNOME Project to be successful as a whole.

We’re asking you to help us to help make the GNOME Project successful becoming a Friend of GNOME. By supporting the Foundation, you’re helping us to provide these necessary resources to the GNOME community, as well as expand our offerings to better meet the growing needs of the Project.

Everything the GNOME Foundation does is for the GNOME community. By supporting us, you’re supporting a global community looking to serve everyone, regardless of geography or language. Join us in working towards a brighter future for GNOME by becoming a Friend of GNOME today.

Richard Hughes: Improving the security model of the LVFS

Mër, 11/12/2019 - 9:34pd

There are lots of layers of security in the LVFS and fwupd design, including restricted account modes, 2FA, and server side AppStream namespaces. The most powerful one is the so-called vendor-id that the vendors cannot assign themselves, and is assigned by me when creating the vendor account on the LVFS. The way this works is that all firmware from the vendor is tagged with a vendor-id string like USB:0x056A which in this case matches the USB consortium vendor assigned ID. Client side, the vendor-id from the signed metadata is checked against the physical device and the firmware is updated only if the ID matches. This ensures that malicious or careless users on the LVFS can never ship firmware updates for other vendors hardware. About 90% of the vendors on the LVFS are locked down with this mechanism.

Some vendors have to have IDs that they don’t actually own, a good example here is for a DFU device like the 8bitdo controllers. In runtime mode they use the USB-assigned 8bitdo VID, but in bootloader mode they use a generic VID which is assigned to the chip supplier as they are using the reference bootloader. This is obviously fine, and both vendor IDs are assigned to 8bitdo on the LVFS for this reason. Another example is where Lenovo is responsible for updating Lenovo-specific NVMe firmware, but where the NVMe vendor isn’t always Lenovo’s PCI ID.

Where this breaks down a little more is for hardware devices that don’t have a built-in assigned vendor mapping. There are three plugins which are causing minor headaches:

  • Redfish — there’s seemingly no PCI vendor code for the enumerated devices themselves
  • ATA — the ATA-ATAPI-5 specification bizarrely makes no mention of any kind of vendor ID in the IDENTIFY block
  • UEFI — the ESRT table frustratingly just lists the version number and the GUID of devices, but no actual sysfs link to each

All the other plugins can be handled in a sane way, mostly automatically as the vast majority derive from either FuUsbDevice or FuUdevDevice.

As UEFI UpdateCapsule updates seem to be the 2nd most popular way to distribute firmware updates we probably ought to think of a sane way of limiting firmware updates to the existing BIOS vendor. We could query the DMI data, so that for instance Lenovo is only able to update Lenovo hardware — but we have to use a made-up pseudo-vendor-id of DMI:Lenovo. Maybe this isn’t so bad. Perhaps the vendor ID isn’t so useful with UEFI Update Capsule as the capsules themselves have to be signed by the firmware vendor before they’ll actually be run.

Anyway, to the point of this blog post: Until recently fwupd would refuse to apply the update if the metadata contained a vendor-id, but the device had not set one. This situation now might happen if for instance a vendor had to have no vendor-id because the device traditionally had no PCI or USB VID, and now in newer versions of fwupd the device would actually have a virtual ID, and so the vendor could be locked down on the LVFS. The fix here is to ignore the metadata vendor-id if there’s no device vendor-id, rather than failing to update.

Most people should be running fwupd 1.3.x, which is the latest and greatest branch of fwupd. I appreciate some LTS distros can’t rebase to a newer minor version, and so for old versions of fwupd I’ve backported the fix. These are the fixes you want if you’re running 0.9.x, 1.0.x, 1.1.x or 1.2.x.

I’ll make the vendor-id a hard requirement for all vendors in about 6 months time, so if you maintain a distro packaged version of fwupd you have that much time before some updates will stop working. If anyone has comments or concerns, please let me know.

Will Thompson: Vanilla is a complex and delicious flavour

Mar, 10/12/2019 - 6:19md

Last week, Tobias Bernard published a thought-provoking article, There is no “Linux” Platform (Part 1), based on a talk at LAS 2019. (Unfortunately I couldn’t make it to LAS, and I haven’t found the time to watch a recording of the talk, so I’m going solely from the blog post here.) The article makes some interesting observations, and I found a fair few things to agree with. But I want to offer a counterpoint to this paragraph of the final section, “The Wrong Incentives”:

The Endless OS shell is a great example of this. They started out with vanilla GNOME Shell, but then added ever more downstream patches in order to address issues found in in-house usability tests. This means that they end up having to do huge rebases every release, which is a lot of work. At the same time, the issues that prompted the changes do not get fixed upstream (Endless have recently changed their strategy and are working upstream much more now, so hopefully this will get better in the future).

If we’re looking at the code shipping in Endless OS today, then yes, our desktop is vanilla GNOME Shell with a few hundred patches on top, and yes, as a result, rebasing onto new GNOME releases is a lot of work. But the starting point for Endless OS was not “what’s wrong with GNOME?” but “what would the ideal desktop look like for a new category of users?”.

When Endless began, the goal was to create a new desktop computing product, targeting new computer users in communities which were under-served by existing platforms and products. The company conducted extensive field research, and designed a desktop user interface for those users. Prototypes were made using various different components, including Openbox, but ultimately the decision was made to base the desktop on GNOME, because GNOME provided a collection of components closest to the desired user experience. The key point here is that basing the Endless desktop on GNOME was an implementation detail, made because the GNOME stack is a robust, feature-rich and flexible base for a desktop.

Over time, the strategy shifted away from being based solely around first-party hardware, towards distributing our software to a broader set of users using standard desktop and laptop hardware. Around the same time, Endless made the switch from first- and third-party apps packaged as a combination of Debian packages and an in-house system towards using Flatpak for apps, and contributed towards the establishment of Flathub. Part of the motivation for this switch was to get Endless out of the business of packaging other people’s applications, and instead to enable app developers to directly target desktop Linux distributions including, but not limited to, Endless OS.

A side-effect of this change is that our user experience has become somewhat less consistent because we have chosen not to theme apps distributed through Flathub, with the exception of minimize/maximize window controls and a different UI font; and, of course, Flathub offers apps built with many different toolkits. This is still a net positive: our users have access to many more applications than they would have done if we had continued distributing everything ourselves.

As the prototypal Endless OS user moved closer to the prototypal GNOME user, we have focused more on finding ways to converge with the GNOME user experience. In some cases, we’ve simply removed functionality which we don’t think is necessary for our current crop of users. For example, Endless OS used to target users whose display was a pre-digital TV screen, with a 720×480 resolution. I think persuading the upstream maintainers of GNOME applications to support this resolution would have been a hard sell in 2014, let alone in 2019!

Some other changes we’ve made can and have been simply be proposed upstream as they are, but the bulk of our downstream functionality forms a different product to GNOME, which we feel is still valuable to our users. We are keen to both improve GNOME, and reduce the significant maintenance burden which Tobias rightly refers to, so we’re incrementally working out which functionality could make sense in both Endless and GNOME in some form, working out what that form could be, and implementing it. This is a big project because engaging constructively with the GNOME community involves more thought and nuance than opening a hundred code-dump merge requests and sailing away into the sunset.

If you are building a product whose starting point is “GNOME, but better”, then I encourage you to seriously consider whether you can work upstream first. I don’t think this is a groundbreaking idea in our community! However, that was not the starting point for Endless OS, and even today, we are aiming for a slightly different product to GNOME.

Back out to the big picture that is the subject of Tobias’ article: I agree that desktop fragmentation is a problem for app developers. Flatpak and Flathub are, in my opinion, a major improvement on the status quo: app developers can target a common environment, and have a reasonable expectation of their apps working on all manner of distributions, while we as distro maintainers need not pretend that we know best how to package a Java IDE. As the maintainer of a niche app written using esoteric tools, Flathub allowed me – for the first time since I wrote the first version in 2008 – to distribute a fully-functional, easy-to-install application directly to users without burdening distribution developers with the chore of packaging bleeding-edge versions of Haskell libraries. It gave me a big incentive to spend some of my (now very limited) free time on some improvements to the app that I had been putting off until I had a way to get them to users (including myself on Endless OS) in a timely manner.

On the other hand, we shouldn’t underestimate the value of GNOME – and distros like Debian – being a great base for products that look very different to GNOME itself: it enables experimentation, exploration, and reaching a broader base of users than GNOME alone could do, while pooling the bulk of our resources. (On a personal level, I owe pretty much my entire career in free software to products based on Debian and the GNOME stack!)

Some caveats: I joined Endless in mid-2016, midway through the story above, so I am relying on my past and current colleagues’ recollections of the early days of the company. Although today I am our Director of Platform, I am still just one person in the team! We’re not a hive mind, and I’m sure you’ll find different opinions on some of these points if you ask around.

Ravgeet Dhillon: Developing Leaderboard for GNOME Hackers

Hën, 09/12/2019 - 4:30md

After completing my Google Summer of Code assignment, I had an idea in my mind for a project where the hard-working people on GNOME, known as GNOME Hackers, could be appreciated based on the amount of work they do for the FLOSS community. In the quest for the same, I wrote a leaderboard web app, GNOME Hackers. It was an awesome experience and I utilized my weekends very well by learning many new things. I will give a brief of them below.

Gitlab API

All of the GNOME groups and projects are hosted on the Gitlab instance of GNOME. The most typical activities that happen on Gitlab are commits, issues and merge requests. These form the basis for scoring that builds up the leaderboard. The data is fetched from the Gitlab Instance of GNOME using the Python wrapper for Gitlab API.

Static Website

To create a static website, I could have used any Static Site Generator such as Jekyll. But this website required some logic such as scoring, selecting top hackers, giving them awards, etc., so I settled for Python. I used Frozen Flask to freeze the website into a static website which could then be hosted on Netlify. This great library reduced the codebase and gave me the power to build the website based on JAMstack.


For allocating points and building up the leaderboard, the script uses the following scheme, If you feel that a rule is biased against the others, you can open an issue and we will have a conservation regarding the same.

Event Points Each line of commit 0.01 Opened Merge Request 5 Closed Merge Request 10 Opened Issue 1 Closed Issue 2 Awards

The script gives you awards for staying on the leaderboard. You can get four types of awards:

  • Gold
  • Silver
  • Bronze
  • Top 10

For each day spent on the leaderboard, the hacker gets a +1 for an award, which he/she is eligible for.

GitHub Actions

Since I have a GitHub Pro pack, I get free 3000 build mins for GitHub Actions, which is an effective tool to automate the tasks. The workflow is simple and clearly explained by the graphic below.

The website builds every day at 00:00 UTC. After the workflow is executed successfully, the website build is pushed to the website branch, which triggers a deploy script on the Netlify and publishes the website accordingly.

Personal Page

Links What’s next

If you liked by work, you can appreciate the same by buying me a cup of coffee. Also, I was given GNOME Membership, while I was working on this project. It made me feel so happy and I want to thank GNOME for all the support. For this website, I am looking forward to new ideas that I can implement on the website to make it even more interesting. If you liked my project, I would love you to star it as well. These little things encourage me to work further.

I am looking for an internship where I can implement my skills and learn the new ones as well. If you guys have any such oppurtunity for me, you can reach me through my email.

Lemme know if you have any doubt, appreciation or anything else that you would like to communicate to me. You can tweet me @ravgeetdhillon. I reply to all the questions as quickly as possible. 😄 And if you liked this post, please share it with your twitter community as well.