Proposal: Merge core/base/good/bad/ugly into a single tarball
This issue is about discussing what are the requirements for our release tarball split.
Advantages:
- Source tree simplicity. We could move all libs and plugins into a single tree at the root of the monorepo.
- Reduce Meson copy/pasted code. Tones of boilerplate is repeated in each of our subprojects, like warning flags, etc.
- Easier to build a single source package than repeating the packaging for each module. This is not only about distro, but also about any project that makes their own build.
- Current split is not what people could think it is: "-bad" contains "ugly" things, "-good" contains GPL things, "-base" is soon to contain unstable things (#2386).
- Makes easier to have internal APIs that are not part of installed headers. Currently if in -good you want to use an API on e.g. GstBuffer you must make it public and guarantee stability. With an unified tree you could make uninstalled static libs and use it in any in-tree element/lib. That makes easier to share helpers and base classes.
- Allow building gst-full from release tarball instead of forcing usage of git repo.
- Solves the
gstreamer
subproject name conflict. A project that wants thegstreamer
monorepo as subproject cannot name itgstreamer.wrap
because that's the same name as core subproject. Movingsubprojects/gstreamer
to the root solves that issue. See also why I suggest releasinggstreamer-full-1.24.0.tar.xz
below, there is a conflict whether "gstreamer" means monorepo or core. - Makes easier to backport patches from git monorepo onto release tarballs. They currently would not apply because they don't have the same source tree.
- Avoid downstream using untested versions mix. Our CI always runs with all modules at the exact same version. While it should in theory work, especially for minor versions, it increases the number of configurations that we need to support and thus possible causes of problems.
- Reduces the number of uploads downstream needs to monitor.
- Stop old joke about good/bad/ugly that is not relevant anymore. See !6130 (closed).
Known concerns:
-
Some open source distro (fedora?) cannot ship "ugly" part, even in their source package.At least Fedora and Ubuntu both ship -ugly, with the weird exception ofdvdspu
that Fedora removes from source tarball with a script that would still work in a mono tarball. - We should keep separated what is unstable/staging. Do we? As pointed by @tpm that's rather a job for doc and header guards. !6130 (comment 2285645).
- More likely to block a minor update downstream, for example a regression in -bad would hold update of -good.
- Circular dependencies forces us to keep at least some plugins separated (#3320 (comment 2290825)).
- Changing the packaging requires lots of paperwork for Ubuntu.
Open question:
- Also merge rtsp server, gst-python, etc? Maybe not for now?
- Keep -ugly separated, but also move "ugly" part of -bad there. Some downstream already have to repackage -bad to remove "ugly" part, so merging everything in a single tarball wouldn't be worse than it already is. Making a real separation based on license could be an improvement however (to be confirmed by open source distro packagers).
Proposal for 1.24:
- Release
gstreamer-full-1.24.0.tar.xz
alongside splitted tarballs. That requires no change in our repository but would already allow downstream to prepare for a single source tarball that they can split, or not, into different binary packages. That would already be enough to make base/good/bad/ugly internal naming rather than imposing it to downstream.