Hello to the Linux forum.
I have long been tormented by the idea of trying to create a universal package manager, so that it does not turn into creating "another" single format for work, but rather uses existing formats to work with current package formats.
Therefore, I chose a more modular architecture based on the main library, which will copy files and keep track of all this in the Database, and, importantly, ostree support for rollbacks in case of unforeseen circumstances
In general, the backend would already be working with a specific type of package, which would parse the metadata and files themselves from the packages, providing a structured format for the installer.
The architecture was simple and based on the fact that all the backends and the underlying library were shared, while the CLI or any other frontend handled them specifically.
Otherwise, the work of all libraries and even the cli itself was based on the concept of a finite automaton, to simplify development and easily add new functions.
So far, my work looks like this, and most of the functionality is implemented in its raw form, but it works nevertheless.
I chose rust and zig as programming languages, since the former is good enough for tracking memory errors and race conditions, but it's hard to write shared libraries, while in zig it's harder to make mistakes in memory, and it's easier to write a shared library.
github.com
I have long been tormented by the idea of trying to create a universal package manager, so that it does not turn into creating "another" single format for work, but rather uses existing formats to work with current package formats.
Therefore, I chose a more modular architecture based on the main library, which will copy files and keep track of all this in the Database, and, importantly, ostree support for rollbacks in case of unforeseen circumstances
In general, the backend would already be working with a specific type of package, which would parse the metadata and files themselves from the packages, providing a structured format for the installer.
The architecture was simple and based on the fact that all the backends and the underlying library were shared, while the CLI or any other frontend handled them specifically.
Otherwise, the work of all libraries and even the cli itself was based on the concept of a finite automaton, to simplify development and easily add new functions.
So far, my work looks like this, and most of the functionality is implemented in its raw form, but it works nevertheless.
I chose rust and zig as programming languages, since the former is good enough for tracking memory errors and race conditions, but it's hard to write shared libraries, while in zig it's harder to make mistakes in memory, and it's easier to write a shared library.
GitHub - justpav05/upac: Package manager for installing any type of package in Linux, as well as registering binary file rollbacks based on OSTree, written in Rust and Zig
Package manager for installing any type of package in Linux, as well as registering binary file rollbacks based on OSTree, written in Rust and Zig - justpav05/upac

