This change addresses an issue where runtime dependencies were not being correctly deduplicated, leading to multiple instances of the same runtime being included in the application environment. This was happening because the `reference` field of `runtime` and `base` was directly assigned with `*localRuntime` or `*localBase`, which did not include repo information. The fix involves wrapping `localRuntime` and `localBase` with `ReferenceWithRepo` and adding repo information. This ensures that the package manager can accurately identify and reuse existing runtimes. The `semanticMatching = true` option is added to `getSatisfiedPackage` to ensure the version matching works. Influence: 1. Test installing an application with shared runtime dependencies. 2. Verify that only one instance of each runtime is present in the environment. 3. Check that the application functions correctly with the deduplicated runtimes. 4. Ensure semantic version matching works as expected. fix: 修复重复的运行时依赖 此更改解决了运行时依赖项未被正确去重的问题,导致应用程序环境中包含同一 运行时的多个实例。发生这种情况是因为 `runtime` 和 `base` 的 `reference` 字段直接使用 `*localRuntime` 或 `*localBase` 进行赋值,未包含仓库信息。 此修复包括使用 `ReferenceWithRepo` 包装 `localRuntime` 和 `localBase` 并添加仓库信息。这确保了包管理器可以准确地识别和重用现有的运行时。 `semanticMatching = true` 选项已添加到 `getSatisfiedPackage`,以确保版本 匹配正常工作。 Influence: 1. 测试安装具有共享运行时依赖项的应用程序。 2. 验证环境中仅存在每个运行时的单个实例。 3. 检查应用程序在使用去重后的运行时时是否正常运行。 4. 确保语义版本匹配按预期工作。 |
||
|---|---|---|
| .github/workflows | ||
| .obs | ||
| .tx | ||
| LICENSES | ||
| api | ||
| apps | ||
| cmake | ||
| cmake.external | ||
| cmake.fix | ||
| docs | ||
| external | ||
| libs | ||
| misc | ||
| po | ||
| tools | ||
| .clang-format | ||
| .cmake-format.py | ||
| .deepsource.toml | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmodules | ||
| BUILD.md | ||
| BUILD.zh_CN.md | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| LICENSE | ||
| README.md | ||
| README.zh_CN.md | ||
| REUSE.toml | ||
| configure.h.in | ||
| linglong.yaml | ||
| release.bash | ||
README.md
Linyaps: Next-Gen Universal Package Manager for Linux
📦 Introduction
Linyaps (Linyaps Is Not Yet Another Packaging System) is a cross-distribution Linux package format developed and open-sourced by the Linyaps community. It implements application packaging, management, and distribution through independent sandbox containers, aiming to replace traditional package managers like deb and rpm. Linyaps ensures Linux software runs with better compatibility, security, and efficiency.
✨ Highlights
- Innovative Partial Runtime Design: Based on a standardized sandbox Runtime, applications can be built once and run across all Linux distributions. Multiple Runtime versions coexist with shared files to reduce redundancy. Shared resources are reused during startup via dynamic libraries, significantly improving speed and avoiding dependency conflicts.
- Non-Privileged Sandbox with Dual-Layer Isolation: Runs without root privileges by default. Utilizes kernel Namespace isolation (process/filesystem/network) to create a secure sandbox. Atomic incremental updates and version rollbacks are provided via OSTree repositories, resulting in lower resource consumption compared to full sandbox solutions.
🎏 Progress
- Supported Distributions: deepin, UOS, openEuler, Ubuntu, Debian, openKylin, Anolis OS. More distributions are under adaptation. Contributions are welcome.
- CPU Architectures: X86, ARM64, LoongArch. Future support for RISC-V and others.
⚙️ Installation
Installation instructions for supported distributions:
deepin 23
Install:
echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/linglong:/CI:/release/Deepin_23/ ./" | sudo tee /etc/apt/sources.list.d/linglong.list
sudo apt update
sudo apt install linglong-bin
Fedora 41
sudo dnf config-manager addrepo --from-repofile "https://ci.deepin.com/repo/obs/linglong:/CI:/release/Fedora_41/linglong%3ACI%3Arelease.repo"
sudo dnf update
sudo dnf install linglong-bin
Ubuntu 24.04
echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/linglong:/CI:/release/xUbuntu_24.04/ ./" | sudo tee /etc/apt/sources.list.d/linglong.list
sudo apt update
sudo apt install linglong-bin
Debian 12
echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/linglong:/CI:/release/Debian_12/ ./" | sudo tee /etc/apt/sources.list.d/linglong.list
sudo apt update
sudo apt install linglong-bin
openEuler 23.09
sudo dnf config-manager --add-repo "https://ci.deepin.com/repo/obs/linglong:/CI:/release/openEuler_23.09/linglong%3ACI%3Arelease.repo"
sudo sh -c "echo gpgcheck=0 >> /etc/yum.repos.d/linglong%3ACI%3Arelease.repo"
sudo dnf update
sudo dnf install linglong-bin
uos 1070
echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/linglong:/CI:/release/uos_1070/ ./" | sudo tee /etc/apt/sources.list.d/linglong.list
sudo apt update
sudo apt install linglong-bin
AnolisOS 8
sudo dnf config-manager addrepo --from-repofile "https://ci.deepin.com/repo/obs/linglong:/CI:/release/AnolisOS_8/linglong%3ACI%3Arelease.repo"
sudo dnf update
sudo dnf install linglong-bin
openkylin 2.0
echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/linglong:/CI:/release/openkylin_2.0/ ./" | sudo tee /etc/apt/sources.list.d/linglong.list
sudo apt update
sudo apt install linglong-bin
🚀 Quick Start
ll-cli install cn.org.linyaps.demo
ll-cli run cn.org.linyaps.demo
🎯 Motivation
Why develop Linyaps when Snap, Flatpak, and AppImage already exist?
- In 2017, we evaluated Flatpak and built 100+ packages, but discontinued due to large application size, excessive disk usage, and slow security fixes.
- Snap has compatibility issues outside Ubuntu and lacks an open ecosystem.
- AppImage offers portability but lacks centralized repository management and robust sandboxing, compromising security.
After extensive experimentation, we designed Linyaps to address these shortcomings. Key advantages over alternatives include:
- Partial Runtime: Smaller footprint and faster startup via shared resources.
- Rootless Sandbox: Enhanced security without requiring root privileges.
Benchmark results demonstrate Linyaps' performance superiority:
| Test # | Linyaps Frames | Linyaps Time (ms) | Flatpak Frames | Flatpak Time (ms) | AppImage Frames | AppImage Time (ms) | Snap Frames | Snap Time (ms) |
|---|---|---|---|---|---|---|---|---|
| 1 | 9 | 149.4 | 14 | 232.4 | 16 | 265.6 | 42 | 697.2 |
| 2 | 9 | 149.4 | 13 | 215.8 | 17 | 282.2 | 41 | 680.6 |
| 3 | 8 | 132.8 | 9 | 149.4 | 15 | 249 | 40 | 664 |
| 4 | 9 | 149.4 | 13 | 215.8 | 15 | 249 | 41 | 680.6 |
| 5 | 8 | 132.8 | 14 | 232.4 | 16 | 265.6 | 42 | 697.2 |
| 6 | 8 | 132.8 | 13 | 215.8 | 15 | 249 | 39 | 664 |
| 7 | 9 | 149.4 | 12 | 199.2 | 15 | 249 | 39 | 647.4 |
| 8 | 8 | 132.8 | 14 | 232.4 | 16 | 265.6 | 40 | 680.6 |
| Avg | 8.5 | 141.1 | 12.8 | 213.7 | 15.6 | 261.6 | 40.5 | 676.2 |
📨 Getting Help
For assistance, use the following channels:
📝 Documentation
Command-line Tools
Build Tools
Package Conversion Tools
deb Conversion
AppImage Conversion
Flatpak Conversion
Debugging
FAQs
📖 Learning Resources
Related Projects
Tutorial Series
- Linyaps Packaging Basics
- Manual Compilation in Container
- Offline Source Compilation
- Compilation with Git & Patch
- Automated Testing Suite
Explore more tutorials at Linyaps Official Website.
⚒️ Contribution
We welcome issue reports and contributions. See the Build Guide for instructions on building Linyaps from source.
Start discussions on GitHub Discussions.
⚖️ License
Licensed under LGPL-3.0-or-later.
👥 Community
Acknowledgment to all contributors! Visit our Community Page.