Discover more from Console by CodeSee.io
Console #112 -- Interview with Mirko of Bottles
Featuring Astro, mini DALL E, and Bottles
Unblock your engineering team from design. Catalog is a design studio offering unlimited design services for a flat monthly rate. Every client gets a team of 3 - Design Director, Project Manager, and Designer to ensure everything is delivered on time and at a high quality.
Improve countless product features
Create logos, identities, and design systems
Go from idea to MVP for web and mobile apps
Create marketing materials and lots more!
Check out our website trycatalog.com for work samples. For a limited time we're giving a $500 discount off your first month to all of Console's readers, just mention that you came from this newsletter when you fill out our form.
Build fast websites, faster. Astro is a new kind of static site builder for the modern web. Powerful developer experience meets lightweight output.
min(DALL·E) is a minimal implementation of DALL·E Mini in PyTorch
language: Python, stars: 2560, issues: 11, last commit: June 03, 2022
Easily manage wine prefixes in a new way. Run Windows software and games on Linux.
Not subscribed to Console? Join thousands of engineers, VCs, and early-stage CTOs in subscribing to a weekly roundup of the latest in open-source software, curated by an ex-Amazon engineer
Hey Mirko! Thanks for joining us! Let us start with your background. Where have you worked in the past, where are you from, how did you learn how to program, what languages or frameworks do you like?
I started experimenting with computing with the arrival of the first PC at home. After a few years I had already formatted and installed Ubuntu (a GNU/Linux distribution).
I started by studying agribusiness, a sector for which I still cultivate a great passion. I interrupted my studies when I was 18 for several factors and started a hosting provider company a year later. I closed the company after two years to move to a new city and take a new job at Divisible Odd, a startup in the IT sector that was very promising at the time and which wanted to revolutionize the automation of business management but unfortunately turned out to be a big flop and I quit.
In the following years, I worked for other companies as an external consultant and project manager. In 2021 I founded an IT company (fabricators.ltd) with a great friend of mine, we develop and sell systems for publication automation and security on messaging platforms, among other things we also do design/development consulting and provide managed hosting services.
I have been fascinated by Machine Learning for a few years now, with which I often do crazy experiments; I am considering its adoption in Bottles as well.
Despite my developer background, I define myself as a UI/UX designer which is my greatest passion, when it comes to design there is no clock for me. My two important companions are Figma and Gravit Designer. Although I mainly make web UIs, I am not fond of CSS preprocessors nor frameworks although I have worked with Bootstrap, Foundation, Bulma, Pure, UiKit and others, I prefer to create the framework from scratch.
Who or what are your biggest influences as a developer?
This is a question I never asked myself and had to think about it a lot. Initially, I thought I was not influenced by third parties but I don't think that is possible, sometimes it really takes only a few words to be completely influenced in something.
I think the biggest influence was given to me by Pietro, a close friend of mine as well as my partner in the current company. I have known Pietro for many years, we met through my brother with whom he played video games, after a few years we had already created many projects together. In the team, we were always me the designer and him the developer. His passion and skill in programming is certainly an example for me and I'm sure I got very close to this world thanks to the long talks we had and still have now.
What's an opinion you have that most people don't agree with?
My unpopular opinion is very specific and concerns the distribution of packages on GNU/Linux distributions. I am a strong supporter of Flatpak, a universal package format (available in most Linux distributions) and I very often run into people who are not of the same opinion. I am against the use of traditional packages and to me, they are a real look back, something we should leave behind once and for all. Flatpak as well as Snap, allow a lot more freedom to the developer to deploy their application on any Linux distribution, guaranteeing the consistency of the user experience they have thought for their application.
What is your favorite software tool?
If you could dictate that everyone in the world should read one book, what would it be?
It might be trite but: "The Cathedral and the Bazaar". This is an enlightening essay that inspired me to espouse open source and the decentralized development model.
If you could teach every 12-year-old in the world one thing, what would it be and why?
Always respect and value others' opinions even if you disagree. It is always important to evaluate each point of view well, not only in programming but also in everyday life, as very often we happen to think that there is nothing but our own opinion and this makes us blind and often superfluous.
If I gave you $100 million to invest in one thing right now, where would you put it?
Education. There are still really a lot of people in the world who cannot afford adequate education, not only in computer science but in the most basic subjects. I believe education should always be free and not a luxury of "a few." I do not have a degree as I did not finish my education but I had the luxury of being born in a country where elementary education is available to everyone and I cannot imagine what I would have become without it. To this day I still study, when I have free time I keep myself informed and learn new things, without the basics I am taught I would not be able to keep myself informed and information is the basis of everything, it is what keeps us anchored in the present and gives us the consciousness of the past.
What are you currently learning?
I recently started studying Rust, 3D modeling (via Blender), game development (Unreal Engine), and gRPC. I like having no free time and keeping busy. When I'm not thinking about computer science I listen to documentary podcasts about world history. Mostly Italian podcasts, specifically Alessandro Barbero, a historian.
What have you been listening to lately?
Recently I have been following a series of podcasts on gRPC and a documentary about Francis Drake, the 16th-century corsair who first circumnavigated the globe.
How do you separate good project ideas from bad ones?
I believe that time is the most valuable thing for everyone, based on that I try to figure out if what the project remedies is worth the time the user is going to invest in using it, finally I evaluate if the development time is worth the result.
Why was Bottles started?
Bottles started in 2017 as a need and experiment of mine. I had recently installed elementary OS, a GNU/Linux distribution, I wanted to make a native application for that distribution, using GTK, Python, and elementary's Granite library (a library containing mostly widgets for graphical user interfaces compatible with the system's UX). I thought about what my needs were and realized that I needed an application that would allow me to use Windows software on Linux easily. At that time similar software already existed but I always found them unintuitive, so I decided to make this project, without any ambition.
About two years later the project started to grow fast, I'm still not sure what happened but I ended up with a big community and an ever-evolving application.
Where did the name for Bottles come from?
It is a play on words. On Linux to use Windows software, you use Wine, a compatibility layer that translates calls from Windows APIs into POSIX-compatible ones. Wine uses containers called wineprefix, these replicate the structure of a Windows operating system (folders, registries etc..). From here the game was simple... Where is the wine? Well in the bottles.
What is the most challenging problem that’s been solved in Bottles, so far?
The biggest problem in using Wine is its complexity for the ordinary user. Wine requires a lot of knowledge, in most cases, a Windows program requires manual configurations and dependencies to run and the inexperienced user does not know his way around, also Wine has a lot of tools separated from each other, and often the user does not know how to reach them.
In Bottles we have graphically implemented and/or rewritten almost every tool in Wine, every operation can be done without leaving the Bottles interface. We created a dependency manager for Windows software, the user can install a font or runtime with one click, and Bottles will do the rest.
However, this does not really solve the problem, because yes everything is included and easily accessible but it does not solve the user's inexperience, which is why we made an environment system. To install a Windows program, we need a bottle, in creating it the user is asked whether they will install games, software, or conduct experiments (for advanced users) in that bottle. Based on that choice, Bottles pre-configures the bottle with a set of dependencies and configurations to run most software of that type, so the user only has to install the application and it (in most cases), will work.
Over time we have tried to make it easier to install programs as well; we have added a new section called Installers. This uses manifests with a set of instructions that Bottles reads and interprets to install a program, with no effort on the user's part; they simply choose what they want to install and start the installation. Installers are a very recent and community repository-based feature.
What is your typical approach to debugging issues filed in the Bottles repo?
Bottles is mainly provided as a Flatpak, a package that provides all the necessary dependencies and is system independent, in this way we limit the difference between our own and users' installations, excluding dependency issues for example. We invite users to write down the steps to replicate the problem and share their health check, a Bottles-generated file containing a variety of information that helps us understand the environment in which Bottles runs.
What is the release process like for Bottles?
Bottles has 2 releases per month, one on the 14th and one on the 28th. During this time, we collect all bug reports and requests for new features, then schedule them. On GitHub we set up 2 actions, the first one tries to compile the project so we get initial feedback, the second one generates an AppImage that we can use to test all the new features and fixed bugs. Before each release, we compile the Flatpak and test how the application works and apply fixes if needed. When everything is working properly, we proceed with the release.
What is the best way for a new developer to contribute to Bottles?
The best way to contribute is to participate in our discussions on Discord, Matrix, Telegram, or GitHub. For us, discussing before opening a Pull Request is very important to avoid work on something we may have already planned.
Are there any other projects besides Bottles that you’re working on?
I have many ongoing projects that I am working on, however, I’m devoting much less time to than Bottles. I am working on a racing video game in Unreal Engine 4, runtimezilla (a runtime generator for Linux based on YAML recipes), a GTK client for Twitch, and several others.
Where do you see open-source heading next?
I believe that the next step for open-source is for consumer users to take, by becoming aware of the fact that very often behind an open source project is one or more people who invest their time to often offer a completely free product. By "becoming aware," I don't mean lowering expectations but understanding the weight of the time and choices of those working on the project.
Do you have any suggestions for someone trying to make their first contribution to an open-source project?
Don't think there are useless contributions. Responding to an issue with your opinion, fixing a grammar error, translating a language, etc., are all great contributions. Don't wait for the big break, the most important bugfix, always contribute when you can, even if only with your ideas, and if those on the other side don't appreciate it (well because it happens), move on to the next project and don't make a big deal about it.
Want to join the conversation about one of the projects featured this week? Drop a comment, or see what others are saying!