Twórcy gry Bottles niedawno ujawnili w poście na blogu szczegóły prac nad projektem Bottles Next. Jest to inicjatywa mająca na celu całkowitą przebudowę architektury i bazy kodu projektu.
W oświadczeniu wspomniano, że obecna wersja Bottles, napisana w Pythonie z interfejsem opartym na GTK, ma istotne ograniczenia , które utrudniają włączanie nowych funkcji, takich jak obsługa systemu macOS, i stwarza problemy, które można rozwiązać jedynie poprzez gruntowną zmianę strukturalną.
Ponad rok temu ogłosiliśmy Bottles Next, całkowicie przepisaną wersję projektu Bottles. Początkowo pomysł polegał na wykorzystaniu technologii internetowych, aby zapewnić użytkownikom takie doświadczenia, jakie sobie zaplanowaliśmy. Jednakże, jak to często bywa, przeprowadzono szeroko zakrojone badania, debaty, eksperymenty i ciągłą ponowną ocenę.
Po co przechodzić przez te wszystkie kłopoty? Cóż, żeby mieć pewność, że podejmujemy właściwe decyzje.
Po ogłoszeniu zaczęliśmy eksperymentować z wieloma technologiami, ale przede wszystkim wysłuchaliśmy opinii społeczności, szczególnie tych związanych z Electronem. To skłoniło nas do poszukiwania innych ścieżek, co doprowadziło do stworzenia prototypów frameworku dostosowanych do specyficznych potrzeb Bottles Next.
I oto jesteśmy dzisiaj.
Dlatego nowe podejście dzieli aplikację na trzy główne komponenty:
- Klient: odpowiedzialny za interfejs graficzny
- Serwer: odpowiedzialny za logikę uruchamiania aplikacji i zarządzania prefiksami Wine
- Agent: który działa w Wine i współpracuje bezpośrednio z API systemu Windows.
Chociaż początkowo rozważano wdrożenie klienta za pomocą technologii internetowych, takich jak Electron i VueJS, a serwer zaprojektowano w języku Go, reakcja społeczności i wyniki uzyskane za pomocą prototypów sprawiły, że programiści porzucili ten pomysł.
Dlatego ostatecznie zdecydowano się na użycie Rusta zarówno po stronie klienta, jak i serwera, a interfejs graficzny miał bazować na frameworku libcosmic. Framework ten, używany w środowisku graficznym COSMIC, stanowi rozszerzenie biblioteki iced , ułatwiając tworzenie nowoczesnych i skalowalnych interfejsów graficznych. Libcosmic wykorzystuje reaktywny model programowania i architekturę podobną do deklaratywnego języka Elm, co ułatwia zrozumienie go programistom zaznajomionym z tym podejściem.

Chociaż twórcy woleliby pracować z językiem Go, ostatecznie zdecydowali się na Rust ze względu na ograniczoną dostępność wysokiej jakości narzędzi do tworzenia interfejsów graficznych w Go. Pomimo tej zmiany, nowa architektura zakłada również utrzymanie klasycznej wersji interfejsu jako opcji, oferując użytkownikom znajome środowisko, a jednocześnie dostosowując się do nowych standardów i technologii.
W zakresie renderowania, Bottles Next będzie obsługiwać silniki takie jak Vulkan, Metal, DX12, OpenGL 2.1+ i OpenGL ES 2.0+, zapewniając szeroką adaptację do różnych systemów i sprzętu. Ta zmiana obiecuje lepszą wydajność, rozszerzoną kompatybilność międzyplatformową i solidniejsze podstawy do przyszłego rozwoju Bottles.
Ta aktualizacja dotyczy zarówno Bottles Legacy (aktualna wersja Bottles), jak i Bottles Next. W nadchodzących tygodniach zostanie ukończona pierwsza wersja cpaka. Jest to przenośny format dystrybucji oprogramowania z deduplikacją, oparty w całości na obrazach OCI.
Wspomniano również, że agent Bottles Next, działający w środowisku Windows generowanym przez Wine, zostanie napisany w języku C# z wykorzystaniem platformy .NET. Wybór ten odpowiada specyficznym potrzebom usługi WineBridge, która wymaga efektywnej integracji z API Windows w środowisku emulowanym.
Jeśli chodzi o rozwój, kontener do testowania wstępnego prototypu Bottles Next, napisanego w całości w języku Rust, ma zostać wydany za kilka tygodni . Na razie dostępna jest jedynie podstawowa wersja demonstracyjna, pozwalająca użytkownikom zapoznać się z możliwościami i kierunkiem rozwoju projektu. Przejście na Bottles Next obiecuje znaczną poprawę funkcjonalności, kompatybilności i wydajności.
Na koniec, jeśli chcesz dowiedzieć się więcej na ten temat , możesz znaleźć szczegóły pod poniższym linkiem.