Documentation: Expand package manager FAQ with pkg info

Explain a bit about what pkg is and what it isn't, and clarify that
while Serenity kinda-sorta has the beginnings of a "package manager",
it's not exactly like a typical Linux package manager with binary
software.
This commit is contained in:
kleines Filmröllchen 2024-01-06 00:11:29 +01:00 committed by Andrew Kaster
parent 7abda6a36f
commit 63de4d3ada
Notes: sideshowbarker 2024-07-17 04:57:23 +09:00

View file

@ -28,11 +28,15 @@ The SerenityOS project tries to maximize hackability, accountability, and fun(!)
## Does SerenityOS have a package manager?
No, SerenityOS does not have a package manager. The project uses a monorepo approach, meaning that all software is built in the same style and using the same tools. There is no reason to have something like a package manager because of this.
In short, no, SerenityOS does not have a "Linux-style" package manager with pre-built software.
*However* there are ports which can be found in the [Ports directory](../Ports). A port is a piece of software that can optionally be installed, might not have been built by us, but supports running on SerenityOS. They act quite similarly to packages, each coming with their own install script.
More specifically, SerenityOS does not have a package manager that allows you to download pre-built binary images software. The project uses a monorepo approach, meaning that all software is built in the same style and using the same tools. Additionally, the SerenityOS ABI, such as library symbols or syscall interfaces, have absolutely no stability guarantee and should be expected to change at any moment. (You can expect the POSIX C library API to remain relatively stable.) There is no reason to have a binary package manager because of this.
Currently when running the system in a virtual machine, ports need to be cross compiled on the host, and added to the file system image before booting. Then it's also possible to configure the build system to [in- or exclude components](./AdvancedBuildInstructions.md#component-configuration) from a build.
The supported method to use third-party software is by compiling ports that can be found in the [Ports directory](../Ports). A port is a piece of software that can optionally be installed, might not have been built by us, but supports running on SerenityOS. They act quite similarly to packages, each coming with their own install script. The significant difference is that ports are always built from source.
Currently when running the system in a virtual machine, ports should be cross compiled on the host, and added to the file system image before booting. It is possible to compile ports on SerenityOS itself, which requires quite a bit of manual work. At the moment, this is not a recommended or actively supported workflow. In the future, this process *may* be supported more easily with the `pkg` tool. If you are interested in contributing in this regard, take a look at the #package-manager channel on Discord.
In regards to SerenityOS components themselves, it is possible to [exclude some of them](./AdvancedBuildInstructions.md#component-configuration) from the build at compile time.
## Why is there an MP3 implementation in SerenityOS if MP3 is protected by patents?
@ -41,4 +45,3 @@ Currently when running the system in a virtual machine, ports need to be cross c
MP3 was indeed originally protected by patents, preventing certain uses of the format. All MP3 patents, however, have expired since at least 2017, depending on where a specific patent was registered. Therefore, we believe it to be completely legal to implement MP3 as 2-clause BSD licensed software without acquiring patent licenses.
*However*, this does not apply to many other multimedia formats, such as the popular H.264 (AVC) and H.265 (HEVC) video codecs or the JPEG 2000 image format. As long as there is any reason to believe that a format is covered by patents, there will not be an implementation in the SerenityOS monorepo, as we believe this to be incompatible with the BSD 2-clause license in general. *However however*, third-party ports with differing licenses can provide implementations for these formats, such as ffmpeg. Depending on your situation and/or use case, using this third-party software might not be legal (for example, see the [ffmpeg information on the same topic](https://ffmpeg.org/legal.html)). Everything regarding the legal situation of the SerenityOS code is handled by [our license](../LICENSE), everything regarding the legal situation of third-party code is handled by the license of the particular software.