Contributing to Boxes

I have to admit that Boxes is a bit late for the Flatpak party, but that’s not a problem. The technical difficulties of getting a virtualization hypervisor to run inside the flatpak sandbox are mostly overcomed. This way, contributing to Boxes has never been easier.

In the following sections I will describe the step-by-step process of making your first code contribution to GNOME Boxes.

Get GNOME Builder

Builder makes it very easy to download and build GNOME applications with just a couple of clicks. It will also make your life easier while writing the code.

Download Builder

Download and build Boxes

GNOME Builder: cloning a project and building it

That’s it! Now that you have the project built and can run it, we can start looking into fixing bugs.

Finding an issue to hack

You can have an overview of the ongoing work in the project by browsing our kanban board. We also have issues tagged as Newcomers if you are making your first contribution and want to start hacking on something easy.

Create a GitLab account and fork the project

Visit gitlab.gnome.org and create an account. GitLab will pop up a banner asking you to add your SSH keys to your profile, or you can go directly to edit your profile.

After your profile has been properly setup, it is time to fork the project!

Go to the Boxes project page and click the Fork button. This will create your own copy of the git repository under your personal namespace in GitLab.

Finally, get your fork URL and add to your local git repository as a remote:

git remote add fork $project_url

Making changes and submitting your code

After building Boxes and finding an issue to work, it is time to dive into the codebase. Edit the files and press the GNOME Builder “play” button to see your changes take effect.

Since the migration to GitLab, we have adopted the merge request workflow.

You need to:

1. Create a git branch and commit your changes

git checkout -b $descriptive-branch-name

Do your work, and commit your changes. Take a look at our commit message guidelines.

2. Push your changes for the world to see!

git push fork

A message with a link to create a merge request will be printed in your terminal. Click it, describe your changes, and Submit!

3. Follow up on the feedback

Me and other developers will review your work and recommend changes if necessary. We will iterate over and over until your contributions are ready to be merged.

4. Celebrate your first contribution!

Further reading

The steps described above are based on the GNOME Newcomers initiative. We have a detailed step-by-step process of making contributions and you should definitely check it out. It has pointers about documentation, tips about finding the right approach to dive into the code base, and examples.

Let’s do it!

Boxes + Flatpak

TL;DR: You can now install GNOME Boxes directly from Flathub! 🎉

INSTALL

Why are we so excited about this?

It might seem at first sight that Boxes is a simple application, and that is partially true if you ignore the deep stack under the hood responsible for making virtualization simple™. The various modules (some of them gigantic such as qemu, libvirt, freerdp…) need to be setup in perfect harmony for us to boot a whole operating system with its essential functionalities.

The GNU/Linux distribution model has historically delegated to downstream packagers the responsibility of integrating dependencies in order to provide an application to their end users. This model has worked for some for many decades, but it has fundamental flaws that “trickle down” making the upstream developers’ life miserable.

Don’t get me wrong, bugs are mostly our fault, but a significant amount of bug reports I receive consist of issues I cannot reproduce in my development environment. A combinatorial explosion of package versions, build flags, and/or pivotal architecture differences between distros.

Therefore this is the first and foremost benefit we get from shipping Boxes as a Flatpak.

Another difficulty we face during our development cycle is having the ability of having designers, translators, and marketing folk being able to run our latest snapshot or a specific work-in-progress tree. With the GitLab continuous integration combined with Flatpak we can spin bundles at any moment, and they can be installed within a couple of clicks, alongside other versions of the same app! This is The Future!

Having our apps widely available is another concern we have. Many distributions which stick to the package model also support Flatpak. Besides that, there are new players which are essentially different. Container-based desktop operating systems are a thing now too.

Software is never done…

There are indeed downsides of running Boxes in a Flatpak in comparison with a well crafted build of dependencies bottom-up. But these are issues that can be solved and are going to be prioritized in our TODO list.

Running Boxes in a Flatpak TODAY you won’t have yet:

  • A bridged network between host and guests.
  • The ability of installing an image from a physical device.
  • Access to your system’s libvirtd (we run our own libvirtd in the sandbox).
  • Shared folders.
  • USB redirection.
  • $YOUR_ISSUE_HERE

The list above is far from complete, and I would like to count on you to experiment with the Flatpak and report issues you might encounter. Use the label “flatpak” to collect points which you can later exchange for beers or other beverages of your choice. 😉

Boxes now supports RDP connections

Boxes has been the go-to option for easy virtual machine setups in GNOME for quite some time, but some people don’t know that our beloved application can also act as a remote viewer.

The “Enter URL” option in the new machine assistant is how you get a new remote machine added to your collection. It supports addresses of Spice and VNC servers and oVirt and Libvirt brokers. You can also paste the URL of an operating system image (iso, img, qcow, etc…) and Boxes will download and boot it for you.

However, there is life out of our GNU/Linux boxes and we need to stay connected. Windows is extremely popular and it ships a RDP server by default, making the adoption of open alternatives a bit unhandy there.

Imagine you have clients running Windows that need your remote support, or you couldn’t convince your family back home to switch to GNU/Linux, etc…

Now Boxes also supports RDP!

Boxes - screenshot

This feature is powered by FreeRDP. For convenience, I wrote a glib wrapper around the essential freerdp API so we can consume it via gobject-introspection in GNOME Boxes and others could reuse it for their own applications.

Heavily inspired in the gtk-vnc API,  I decided to name it gtk-frdp. So original! 😉

If you are interested in writing a RDP client of your own, or maybe port an existent one to gtk-frdp, you can achieve it with a few lines of code such as below (I choose Python for legibility, but it could be any gobject-introspected language of your choice).

from gi.repository import Gtk, GtkFrdp

window = Gtk.Window () display = GtkFrdp.Display () window.add (display)
display.open_host ("192.168.0.1", 3389) display.username = "username" display.password = "password"
window.show_all () Gtk.main ()

That simple!

This and a few other cool features will be available in our next stable release, GNOME 3.30. Stay tuned!

Boxes happenings in the 3.28 cycle

It is been a long time coming, but I finally decided to take a moment to summarize the Boxes happenings in the last six months. And a lot has happened!

git diff –shortstat gnome-3-26 gnome-3-28
162 files changed, 10913 insertions(+), 7951 deletions(-)

Firstly, I haven’t stated in this blog that I am maintaining Boxes for the last couple of releases. It’s been an exciting learning journey and I cannot thank Zeeshan Ali enough for paving the way for me.

3.28 has many internal changes and enhancements worth enumerating, therefore I am going to highlight the most relevant ones IMO.

No-Cost RHEL Developer Subscription

You can now subscribe for a non-cost Red Hat Enterprise Linux developer subscription and benefit from all the goods included in the Red Hat Enterprise Linux Developer Suite.

You read it first in Debarshi’s blog post!

Download an OS

Distro hoping was my hobby back in the days when distros were really different from each other. I feel that this is somehow coming back now with new players targeting the desktop market, such as Endless OS and Pop!_OS.

Boxes intents to make it easy for people to try new operating systems from the comfort of their current system. Whether you want to explore, run something in a contained environment, perform something risky and easily recover your installation, Boxes wants to make it simple.

I previously wrote a blog post specifically on this feature. Lots has changed since then and more changes are coming. Stay tuned!

Port to GtkFlowBox

Libgd was an experimental ground for us to introduce many widgets, including our re-sizable icon views with their selection-mode and convenient API. Boxes no longer needs libgd for that since Gtk+ has been evolving along the years and more modern widgets have been gradually introduced.

We ported the notifications from GdNotifications to GtkRevealer, and now the content views are GtkFlowBox and GtkListBox.

Visually it should look no different to the end-user, but for developers it means a significant code simplification.

$ git diff 749638d..eda5ee3 –shortstat src/icon-view.vala
1 file changed, 143 insertions(+), 336 deletions(-)

Migrating to GitLab

The migration to GitLab is another bit that shouldn’t make a difference from an end-user point of view, but is indeed a big deal for everyone involved in development.

Our Kanban board is now the homepage in my working machine.

New contributors are finally comfortable with the contribution workflow, and my bet is that soon we will have statistics to back that up.

File transfers

As simple as that!

A courtesy of Visarion Alexandru.

Port to meson

The word is that nobody ever wrote autotools files from the scratch, ever, but copied from an existing working project and tweaked it. I am no different. My understanding of autotools has been always superficial despite trying to learn it a few times.

No disrespect for those who came before. I acknowledge the needs of ancient times and I wouldn’t bash more something that’s so far from my domain.

The learning curve for Meson made me finally have the motivation to understand build systems. The cleanness of syntax and file structure is definitely medicine for my organizational obsession.

Special thanks to Iñigo Martínez for his dedication to help porting many of our components to Meson.

Handle mime-types

Yep yep, double click on an image/iso file and install!

That’s All Folks!

Many bugfixes landed in this cycle, so I encourage you to check it out.

GNOME Boxes 3.28 is the resulting work of 57 contributors!

If you are interested in contributing to GNOME Boxes, join us on irc.gnome.org, channel #boxes. We have #newcomers issues in our bug tracking so you can start from the beginning.

Download and install operating systems directly in GNOME Boxes

If you are closely following the development of GNOME Boxes, you probably have read Debarshi’s announcement of this new feature that allows you to download and install Red Hat Enterprise Linux gratis directly from Boxes.

This time we are enabling you to install many other operating system virtual machines right from inside Boxes. A moving picture is better than words, so watch the preview below:

View on YouTube

The list is populated by libosinfo, which gets updated shortly after every new OS release. If you don’t see your favorite distro there, please send us a patch.

This feature will feature GNOME 3.28.
Happy virtualization!

GNOME 3.26 Release Party in Brno, Czech Republic

Last Monday our local GNOME community in Brno gathered together to celebrate once more one of our releases.

This time (after many releases) we had a cake! Other than that, we had drinks and great people chatting in a very cozy venue. It was a blast to see old friends and make new.

Pictures taken by our fellow GNOMEr Jiří Eischmann

I would like to thank the GNOME Foundation for sponsoring our meetup and Dominika Vágnerová for organizing it all!

GUADEC 2017

I haven’t been blogging much lately but I couldn’t miss this opportunity of telling you about GUADEC 2017 in the hope that it is going to encourage you to attend our next year edition in Almería, Spain.

Looking back at the six editions of GUADEC that I have attended so far, I can honestly say that we are getting better and better, edition after edition. You might disagree but it is quite clear to me that we are evolving in a very promising direction as a software project and as a community (despite the political turmoil that our world is under).

The GNOME Way has shined as a promising path towards a sustainable and progressive community, where “It is a rejection of technological elitism. It is an egalitarian version of openness” that enables us to move forward in an ethical way.

This way I can guarantee that your attendance is going to be not only a pleasant but enlightening experience.

GUADEC 2017 - Group photo
GUADEC 2017 – Group photo

In this edition, as always, we had an excellent selection of talks presented by our community members. It was extremely hard having to pick a talk when there were multiple ones happening simultaneously.

In the day one morning I was chairing the sessions at the Turing room (nice choice of names along side Hopper btw), which limited my attendance of talks happening in the Hopper room. But anyway I would have been experiencing FOMO if I would be chairing the other room instead. 😉

My personal highlights are “Please Use GNOME Web” by Michael Catanzaro, and Christian Hergert rocking as always in his “State of the Builder” address.  Later that day our former executive director Karen Sandler was keynoting “The Battle Over Our Technology” where once more Software Freedom was in the spotlight.

After the afternoon brake, I chaired the sessions in the Hopper room, which gave me the opportunity to be part of the monetization discussions related to GNOME Software and Flatpak, presented by Jorge Garcia and Richard Hughsie. The activities of this room were closed by Julita Inca giving her reports of her outreachy activities in Peru.

The whole conference day ended with our traditional Interns Lightning Talks. As someone who has been in the other side, I can tell who anxious one must feel of speaking in front of such a qualified audience. But the whole tension disappears in the air as soon as you see how receptive the GNOME community is to Newcomers and their projects.

At day two I attended Jussi Pakkanen talk about meson, since I have been personally porting projects that I maintain into the build system, convincing me even more that this is a right choice. Unfortunately Nirbheek Chauhan couldn’t come, I hope his health is better now.

Carlos Garnacho and Florian Müllner talked about the future of our Shell (and handled very well the questions. 😉

This day I also watched Federico share his experiences of porting librsvg to Rust, and Carlos Garnacho talk about the future of Tracker.

The main attraction of the day, IMO, was Jonathan Blandford’s “The History of GNOME” talk. If you’d have just 30 minutes to watch GUADEC talks, I would recommend this one. It was a zeitgeist of the last 20 years of our project/community with a good pinch of comedy and interaction with the living legends sitting in the audience.

Later everybody tied their ties to get serious for the AGM report. ☺

In the last conference day I skipped Philip’s JavaScript talk to see Jakub Steiner talking about transitions and try to imagine where he would fill drones in the slides. ☺

Continuing in the design world, I was at the audience of Tobias Bernard’s “Building interfaces from the future” as well. #Inspiring

Matthew Garrett (I’m a big fan btw) attended GUADEC to share with us his expertise in security. And after it I jumped to Tristan’s Buildstream talk in the other room.

After lunch I rushed into the conference room to see Tim Lunn talk about Ubuntu’s return to GNOME, since I have nothing but good hopes for both projects and mostly for the users of free desktops.

Peter Hutterer traveled a long distance to tell us about mice! :p Followed by the GitLab conversation which sounded like a very promising closure for all the debates that took place before in emails and forums.

I then hoped into the other room to watch Wim Taymans give a freestyle talk about his exciting experiments developing what we now call Pipewire. To end the activities in the Hopper room, Carlos Garnacho confessed the murder of GdkWindow in front of the audience.

The lightning talks were the cherry on top!

Other than the talks, we had social events which gathered us even closer by having beers and delicious food. A special highlight to the 20th anniversary party which was a fantastic surprise that got us all emotional and proud of our community.

During the Unconference days I took advantage of being a few meters apart from people that I work daily through the internet to have more discussions and insights about the stuff we hack on. I would like to thank Zeeshan Ali for the counselling regarding the future of Boxes.

All in all, I probably forgot to mention many other interactions and remarkable moments that I have experienced throughout the week in Manchester, but I guess you can figure everything else by reading all the other blog posts in Planet GNOME.

Last but not least, I would like to thank my employer Red Hat for sponsoring my trip and the GUADEC organizers for an awesome conference. See you all soon!

Revisiting the Printers Settings

If you read my announcement post or you are already running GNOME 3.24, you probably already know that there is a new Printers panel in GNOME Control Center. The new design is part of a big effort to modernize the Settings user interface.

After the 3.24 release we were able to gather more feedback from our users and, this way, cook up some improvements/enhancements to better suit their use-cases.

The main concern raised after the release was the discoverability of a printer in the list of printers. To tackle these issues we introduced two new features:

Search

Show recently added printer

yep, that’s a gif.

Another must-have feature that the printers panel never had and now is merged is the ability to undo a deletion of a printer.

Some users found it irrelevant to show the ink level bar when there’s no ink information to show, in doing so, we decided to hide it entirely for these cases.

In conclusion, it is worth mentioning that “Software is Never Done“. This is an evolving work which depends on various factors, including your feedback. Please, report bugs, suggest enhancements, and write patches, to make our desktop always better.

Improve focus and productivity by listening to different sounds

I have always had a hard time avoiding distractions during working hours. My hyperactive brain wants to wander off distracted by any kind of noise around me.

Lately I found out that having a background ambient sound such as rain, wind, fireplace, really constrains me from any distraction.

In doing so, inspired by Noisli.com, I created a GNOME Shell extension with similar functionality.

View on YouTube

It is quite simple but it does the job for me.

It is available for download at the extensions website: https://extensions.gnome.org/extension/1224/focusli/

Bug reports/feature requests are welcomed at https://github.com/felipeborges/gnome-shell-extension-focusli/issues

New Printers Panel

As I mentioned in my previous post about the New Users Panel, we are happy to be able to include a new Printers panel in GNOME 3.24.

The Printers panel is also part of the GNOME Control Center redesign effort which intents to introduce the new shell in 3.26.

New printers panel

The printers are now listed all in the same page in a single column. The minimalist look doesn’t mean that we dropped any features. Everything else is now part of the Details Dialog.

Details dialog

The gear button exposes the printing options dialog and the new printer details dialog. Also, let’s you easily set the printer as default or remove it.

Adding a new printer is also cleaner. The new Add Printer dialog can handle authentication of printing servers within the dialog (instead of the extra authentication dialog that we used to have).

Add printer dialog

These and plenty of other changes will be part of GNOME 3.24 which is going to be released in a month. Stay tuned!