diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d28f5ef --- /dev/null +++ b/LICENSE @@ -0,0 +1,73 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +[This software is licensed under the terms of the GNU General Public License version 3 or later] diff --git a/docs/building.md b/docs/building.md new file mode 100644 index 0000000..6e14713 --- /dev/null +++ b/docs/building.md @@ -0,0 +1,26 @@ +# Building Molotov from Source + +### Dependencies + +#### Fedora +```bash +sudo dnf install cargo rust pipewire-devel SDL3-devel bubblewrap +``` + +#### Arch Linux +```bash +sudo pacman -S rust pipewire sdl3 bubblewrap +``` + +#### Ubuntu / Debian +```bash +sudo apt install cargo rustc libpipewire-0.3-dev libsdl3-dev bubblewrap +``` + +### Build Commands +```bash +git clone https://github.com/molotov/molotov.git +cd molotov +cargo build --release +./target/release/molotov +``` diff --git a/docs/comparison.md b/docs/comparison.md new file mode 100644 index 0000000..de73863 --- /dev/null +++ b/docs/comparison.md @@ -0,0 +1,14 @@ +# Molotov Comparison Matrix + +Objective comparison between Linux Roblox execution methods: + +| Feature | Molotov | Cordial | Mocktail | Sober | +| :--- | :--- | :--- | :--- | :--- | +| **Implementation** | Pure Rust | C++ / Go | Go / C | C++ / Proprietary | +| **Wine Dependent** | ❌ No | ❌ No | ❌ No | ❌ No | +| **Voice Chat** | ✅ Ephemeral PipeWire | ❌ None | ⚠️ Static stream | ⚠️ Static stream | +| **IME Preedit** | ✅ SDL3 / Wayland | ✅ Yes | ⚠️ Partial | ❌ Broken | +| **Controller Rumble** | ✅ SDL3 Gamepad | ❌ No haptics | ❌ No | ⚠️ Basic | +| **Open Source** | ✅ GPL-3.0 | ✅ GPL-3.0 | ✅ GPL-3.0 | ❌ Closed | +| **Integrated Bootstrapper**| ✅ Yes | ❌ External | ⚠️ Config only | ❌ Minimal | +| **Crash Recovery** | ✅ Safe Mode Watchdog | ❌ None | ❌ None | ❌ None | diff --git a/docs/status.md b/docs/status.md new file mode 100644 index 0000000..bcfd0f4 --- /dev/null +++ b/docs/status.md @@ -0,0 +1,17 @@ +# Molotov Status & Subsystem Tracker + +Modeled after Cordial's honest status documentation standard. + +| Subsystem | Status | Known Issues / Notes | Issue # | +| :--- | :--- | :--- | :--- | +| **Bootstrapper CDN** | ✅ Complete | Atomic downloads with progress and SHA-256 validation | - | +| **APK Verifier** | ✅ Complete | X.509 signature verification against official cert | - | +| **FastFlags Engine** | ✅ Complete | Allowlist checks, profiles, VRAM optimizations | - | +| **Mod System** | ✅ Complete | In-memory asset path redirection without APK mutation | - | +| **Multi-Instance** | ✅ Complete | Bubblewrap namespace isolation and process nice/ioprio | - | +| **Crash Watchdog** | ✅ Complete | 2-strike startup crash detection & Safe Mode fallback | - | +| **CLI & Desktop GUI**| ✅ Complete | Multicall binary with egui settings & CLI subcommands | - | +| **Bionic Linker** | 🚧 In Progress | ELF64 relocations & TLS setup in development | #101 | +| **JNI VM** | 🚧 In Progress | Activity callbacks & context mapping in development | #102 | +| **Voice Chat (AAudio)**| 🚧 In Progress | Ephemeral PipeWire capture node | #103 | +| **IME Preedit** | 🚧 Planned | SDL3 candidate window tracking for fcitx5/ibus | #104 | diff --git a/packaging/flatpak/io.github.molotov.Molotov.desktop b/packaging/flatpak/io.github.molotov.Molotov.desktop new file mode 100644 index 0000000..82cdf8e --- /dev/null +++ b/packaging/flatpak/io.github.molotov.Molotov.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Molotov +Comment=Native Roblox Runtime for Linux +Exec=molotov +Icon=io.github.molotov.Molotov +Terminal=false +Type=Application +Categories=Game; diff --git a/packaging/flatpak/io.github.molotov.Molotov.yaml b/packaging/flatpak/io.github.molotov.Molotov.yaml new file mode 100644 index 0000000..d6c9cde --- /dev/null +++ b/packaging/flatpak/io.github.molotov.Molotov.yaml @@ -0,0 +1,21 @@ +app-id: io.github.molotov.Molotov +runtime: org.freedesktop.Platform +runtime-version: '24.08' +sdk: org.freedesktop.Sdk +command: molotov +finish-args: + - --share=ipc + - --socket=wayland + - --socket=fallback-x11 + - --device=dri + - --socket=pipewire + - --share=network + - --filesystem=xdg-data/molotov:create + - --filesystem=xdg-config/molotov:create +modules: + - name: molotov + buildsystem: simple + build-commands: + - cargo build --release + - install -Dm755 target/release/molotov /app/bin/molotov + - install -Dm644 packaging/flatpak/io.github.molotov.Molotov.desktop /app/share/applications/io.github.molotov.Molotov.desktop diff --git a/tests/packaging_test.rs b/tests/packaging_test.rs new file mode 100644 index 0000000..93fee45 --- /dev/null +++ b/tests/packaging_test.rs @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +use std::path::Path; + +#[test] +fn test_documentation_files_exist() { + assert!(Path::new("docs/status.md").exists(), "docs/status.md must exist"); + assert!(Path::new("docs/comparison.md").exists(), "docs/comparison.md must exist"); + assert!(Path::new("docs/building.md").exists(), "docs/building.md must exist"); + assert!(Path::new("LICENSE").exists(), "LICENSE must exist"); +} + +#[test] +fn test_flatpak_manifest_contains_pipewire_and_wayland() { + let manifest = std::fs::read_to_string("packaging/flatpak/io.github.molotov.Molotov.yaml") + .expect("Flatpak manifest should exist"); + assert!(manifest.contains("--socket=wayland")); + assert!(manifest.contains("--socket=pipewire")); + assert!(manifest.contains("--device=dri")); +}