Outreachy week 5 - About Fractal

Jan 14 2019

In this week's blog post the task is thinking about the audience a project has :D. Fractal is a pretty interesting and it is a quite new, it is based on a project called Fest that itself had the first commit 2 years ago. Fractal's first commit was in August 2017 and I personally think it's amazing how usable (and used) it is, given the time it has been around for!

What is Fractal even?

I did mention before that Fractal is a client for Matrix that is a very exciting and important project. When I have to explain it shortly I'd say that Matrix strives to be a better and current version of IRC (that was created in the 90s and still occupies a huge space in the hearts of computer nerds of today). If I can rant about it at length I'd probably go on about how increasingly important it is to have reliable, safe, open source, with encryption, that doesn't sell your data, that supports VR for some reason (yeah, I don't really think this part is that important) communication channels.

Matrix has been adopted by several programming projects communities as the default communication channel and I'd imagine that its popularity only tends to grow (even though there are way more alternatives to group chat currently than there were in IRC's time).

Fractal, Rust, GNOME and Matrix

So Fractal is a client for Matrix and it's built using Rust and GTK as technologies. Which is also pretty interesting in itself since Rust is a newish language and the GNOME bindings for it are a work in progress.

Even though in theory Fractal could work with MacOS and Windows (because gtk is supported), currently the recommended and supported path to installation is through Flatpak which is a linux thing (even though there is some work in making Flatpak usable in Windows).

Why does Fractal exists?

So, if you are familiar with Matrix, you probably know that it has some clients in pretty advanced development stages, like Riot, and while Riot is great and has features like cross-platform support and mobile apps, Riot is a web-based client which means it's really heavy and that can be pretty annoying, especially for people that are particularly aware of it (or for people that have less powerful computers).

I talked with my mentor (Daniel Garcia) about the motivations to start Fractal and it was exactly that, he was searching for a native Matrix client to use, found a base project and started off from that :)

Why does Fractal uses the tech it does?

When Daniel was looking for a project for a gtk client project he found Fest that was made using GTK and Rust and started contributing to it :D because he wanted to learn Rust as well.

Eventually, he made enough changes to his fork (for instance Fest uses rust-nightly and Fractal uses the last version Rust stable) that he migrated to his own project that was then named Guillotine (as a reference to Riot and the French revolution, it was later renamed to Fractal, because Guillotine was too heavy of a name after all).

Since Fractal came from Fest, it uses basically the same tech as it :) which was very fortunate because a lot of people are excited about Rust (and the GNOME bindings) right now, which probably helped the project to gain contributors.

Daniel attributes the success of the project to the "gnome community, gnome gitlab migration, great gtk-rs bidings, rust popularity and ease to learn".

How is it working on this project?

I really enjoy it! The contributors are really helpful (I love having helpful comments in my merge requests). But I do have to admit that A LOT of things are way less trivial than I first assumed they should be.

For instance, I'm currently working on a code example for taking a snapshot of a video for the gstreamer-rs repository (the maintainer of the repo offered to review it for me if I did it :D), because we need to get thumbnails from videos to be able to display video previews in Fractal. And this problem is highly not trivial! I mean, it might be trivial in the sense that it is a solved problem, I've found a solution in Python and was given a solution in C from the gstreamer repo and now I'm trying to rewrite it in Rust :) so I can use it in the Fractal project.

On other notes...

Other than that, I'm back in Brazil after attending the Recurse Center and in several ways it's pretty cool to be back home, going back to speaking my native language is nice, but the best things are meeting up with friends and reuniting with the cats <3

Just yesterday I went to the Rust Sao Paulo meetup which, if I'm not wrong, is currently the only active Rust meetup in Brazil and it is definitely worth the trouble of traveling to support it <3. I will submit a talk to it eventually :3 maybe one about Fractal!

This is it for today :D