Release Day 2022.6.14
today isRelease Day!
It’s Release Day again!
These have been a very intense two weeks and we did not believe we would be able to finish it all, luckily we did and we have to thank all the contributors who made it possible. This release has seen contributions from many people also external to the project, who have also offered their consulting services, making the release possible in a very short time.
Ok now let’s get to the point. What’s new in this version?
In Bottles we use to change codename when a release brings important news or a total or almost complete makeover. This version has both requirements and we have therefore decided to switch from the Trento codename to Brescia.
Brescia is an Italian city in Lombardy, with a great artistic and architectural heritage, just think that its monuments dating back to the Roman era have been declared a World Heritage Site by UNESCO.
At Bottles Treviso we have decided to give value to our country, using the names of Italian cities as the codename. This is specifically important as it is the hometown of Pietro di Caprio (one of the administrators of the project) and I also lived there for a while. It is a fantastic city as well as a suggested destination for a trip to Italy.
GTK4 + libadwaita
We announced our intention to migrate to GTK4 and libadwaita on October 10, 2021, about eight months ago. Unfortunately we always had to postpone the work for two main reasons: Bottles was undergoing a huge rework of the backend and libadwaita was not yet available in the repositories of many distributions. To be honest there are still many distributions that do not offer the libadwaita version we need, but after several discussions we decided that it was no longer possible to wait as this would cause more and more complex work in the future (which we cannot afford given team size).
The makeover in GTK4 and libadwaita brings a wind of freshness to Bottles but not only that, in fact the application has never been so efficient. Switching from bottle to bottle is instant, the interface is updated in real time, and everything is super responsive.
New Onboard, First Welcome Meeting is Never Forgotten
Given the rewrite we were doing, we have decided to optimize the Onboard, the welcome screen that we notice the first time Bottles is started. The previous one seemed anonymous and although it explained the key points of the program, it did not make the first meeting magical and we regretted this.
Details & Utilities
The bottle screen is very similar to the previous version but has been tweaked in some aspects and introduces new features.
In the first place we can see that the utilities list has been re-organized, now the most used items are immediately available while all the others grouped in the “Legacy Tools” category. With this version we have renamed in Legacy Tools all the Wine tools that have not yet been fully implemented, rewritten in Bottles that are worth keeping as fallbacks.
Many may think these have been “hidden” making them difficult to reach but it is a user experience choice. In Bottles we try to graphically integrate every single Wine feature to maintain consistency, also using the tools from our interface allows Bottles to track and manage them as the system would expect. It is important to always use our implementations whenever possible. An example are DLL Overrides, in winecfg these are managed on the Windows Registry side, in Bottles they are managed in 3 ways:
- via registry when it comes to installing components or dependencies
- via overrides when they are defined by the user
- via launch options when they are restricted to a program
We have also rewritten the way in which the Programs, Dependencies, Versioning and Installers screens are populated to drastically reduce the loading time and avoid small freezes when there is a lot of data to process.
Speaking of Launch Options, these have been redesigned and introduce support for overriding some bottle preferences.
Let’s say you have active DXVK in a bottle as most of the installed software requires it. When we want to install software that doesn’t work due to its presence, we are forced to create a new bottle. The Preferences Overrides allow you to disable that component only for that specific program, avoiding you to have to make a new bottle.
Some operations may not be immediate, for example starting a program when the WineServer is not yet operational and these delays could give the impression that nothing is happening. Our answer to these problems is the libadwaita toast notifications.
A small toast notification will be shown on the bottom side of the screen for many operations, for example: starting a program, generating the desktop entry, adding the shortcut to Steam, when a dependency or installer has finished, etc.
New Bottle Picker
Many may not know that it is possible to start a run in a bottle, directly from the system FIle Manager. In fact, it is sufficient to choose “Start with Bottles” from the contextual menu of the file in this way Bottles will be opened allowing the choice of the bottle.
Here, we did not like this and we have completely redesigned it.
Now once you have selected “Start with Bottles”, a small window will be shown from which you can choose the bottle, without starting Bottles. We find this approach better as it is immediate since it avoids a large number of checks that are normally performed at boot.
Steam for Windows implementation
Automation has always been one of the factors we care about most in Bottles, we try to avoid user intervention as much as possible, for this reason, for many years now, Bottles automatically list the programs installed in the bottle, avoiding to add them manually. .
With this release we take the integration to a higher level, allowing Bottles to search for integration as well. As a first integration we chose Steam for Windows.
Many will think “But Steam already exists native, why install it via Wine?” Well that’s a legitimate question. We have received many reports (very many) from people pointing out that some games work better with newer versions of Wine (Proton is currently stuck at Wine 7.0 despite following a development branch on its own, while Caffe closely follows Wine releases and includes some extra patches from Tkg).
In our plans there are Origin, Epic Games Store and Battle.net, we would like to list all the games installed in order to simplify starting them. This is a different approach from other prefix and platform managers that normally install a game by prefix and use their own integrations to start that single game, in our case we want to install the launcher and integrate with the one for all launches, avoiding creating multiple prefixes.
Icons are important, they are what allow us to easily identify programs. Bottles (thanks to icoextract) extracts these icons directly from the executable, avoiding the use and maintenance of external databases.
Unfortunately, these icons were sometimes glitched due to a bug in the rendering of some icon formats which are actually archives of multiple icons. To solve the problem we rewrote the extraction mechanism, detecting these formats and then listing the assets within them and extracting the necessary resource.
As an advantage we have that the icons extracted with this system are of higher quality.
Shell Support for bottles-cli
Bottles since few releases has a new cli (bottles-cli) that offers much more functionality than the legacy. In this release we have introduced a new “shell” command that allows you to launch commands within the bottle’s Windows console.
flatpak run --command="bottles-cli" com.usebottles.bottles shell -b <bottle> -i <command> # bottles-cli shell -b <bottle> -i <command>
There are many use cases, for example I have created a script that allows you to integrate Bottles with the Itch.io client. This creates a custom binary for wine which is used by Itch.io to install all the games in a specific bottle.
Support for register_dll in Dependencies
We have also added the new
register_dll action which allows you to register a DLL and ActiveX control in a bottle. If you are a maintainer, take a look at the dedicated page in the maintainers’ documentation.
Our Letter to Packagers
A few days ago we wrote a letter to Bottles’ unofficial packagers and there was a lot of talk about it.
This is a text that explains the problems with providing an unofficial version of Bottles and the massive amount of work it causes us and the little support we can provide in those cases. We would like to reiterate that our invitation to discard packages is aimed at those who have no intention of maintaining them in the correct way and who are currently broken or not in line with our quality standards of the user experience. For all those who want to keep the package and make the best of it, we are available to help them and, if necessary, also make the package official.
To date, the official packages are Flatpak and AUR (bottles) and we are working with other teams to provide Snap and Appimage as well.
All other changes
There are many other changes and improvements in this release. Below are some noteworthy ones, for all others, please refer to the GitHub organization.
- Porting to GTK4 and libadwaita
- Support for override preferences per program
- New Onboard dialog
- New Bottle picker dialog when opening an executable with Bottles
- Shell support for bottles-cli
- Hi-res icons extraction
- List games from Steam for Windows when installed in a bottle
- Toast notifications
- Added 14 new Windows dependencies
- Installers uses fsync as default instead of esync
- Ability to disable Mouse Acceleration
- New regsvr32 action for dependencies (check the maintainers documentation)
- Improved performance and loading times
- Responsive UI
- Added version to Health Check
- Fix for paths with spaces in Steam shortcuts
- Fix importer not showing prefixes
- Fix for ignored patterns when looking for installed programs
- Fix for residues on bottle deletion
- Fix crash when listing a empty bottle
- Fix gamescope not working with launch options
- Fix for glitched icons
- Fix crash when opening a bottle if the runtime is not installed
- Russian translations thanks to @Knebergish
- Bulgarian translations thanks to @RacerBG
- Finnish translations thanks to Jiri Grönroos
- Thai translations thanks to @SashaPGT
- Ukrainian translations thanks to @Socially-disabled
- Hungarian translations thanks to @zoli111
- Japanese translations thanks to @ryonakano
- Portuguese translations thanks to @frohlich
- Danish translations thanks to Ronja Parbst Sørensen
- Korean translations thanks to @yth1130
- Bengali translations thanks to @nazdridoy
- Chinese (Simplified) translations thanks to Eric
- Spanish translations thanks to @DeadKper, @goddrinksjava, @RandomVee, @Dansito
- Dutch translations thanks to @flipflop97
- Czech translations thanks to @vikdevelop
- Indonesian translations thanks to @Khayasen
- Portuguese (Brazil) translations thanks to @davipatricio
- French translations thanks to @julroy67
Thanks to all users who contributed to this release!
~ Bottles’ developers