Hello, everyone. After 2+ years of repeating disagreements with Portage maintainer(s) I have finally decided to fork Portage. My little fork uses technical name of 'portage[mgorny]' [1] (to distinguish it from mainline Portage), and aims to focus on cleaning up code and adding useful features with less concern for infinite bug-by-bug compatibility.
Detailed rationale in README [2]. Before installing ----------------- This is a bleeding-edge, strictness-first fork of Portage. It is intended for developers and power users mostly. Things will break. You will eventually be asked to remove files deprecated 5+ years ago. Developer mistakes will harm you (but someone needs to find them and report them!) Dynamic dependencies are off by default (following Council decision from 3.5yr ago). If you haven't rebuilt your system recently, you may need to use '--changed-deps' once. Afterwards, things should work fine unless developers screw up, and then you should report bugs. Only ~arch version at the moment. Installing ---------- To switch to my fork of Portage, just: emerge -vn sys-apps/portage-mgorny Note that you may need to: emerge --deselect sys-apps/portage app-portage/repoman (repoman is integrated back into Portage) You may also need to upgrade all revdeps of Portage since the newest versions were bumped with updated dependencies. Please note that due to misdesign, Portage will abort upon having to unmerge itself on first install. However, it is a harmless failure and portage[mgorny] will be installed already at the point, so upon restarting it will just finish cleaning up. Merge plan ---------- I do intend to regularly merge from mainline Portage, and preserve reasonable compatibility (especially in terms of API). I also plan to keep reasonably good commit quality as to make it easier for Portage developers to merge back. However, this is not my primary concern. Releases -------- I plan to make frequent releases. I'm planning to version the releases by sequential values of fourth version component from the last Portage release. For example, since the last Portage release is 2.3.24, I have just released portage-mgorny-2.3.24.1, the next release will be 2.3.24.2, etc. until Portage 2.3.25 is released. The releases are made against *git HEAD* and not respective Portage versions, i.e. 2.3.24.1 is [2.3.24 + changes in mainline + my changes]. The matching versions are mostly meant to make >= deps easier, i.e. you can reasonably assume portage-mgorny-2.3.24* will have all the new APIs of portage-2.3.24. The release notes [3] list any major changes I make. They do not list the respective changes in mainline Portage, sorry. Bugs, features and requests --------------------------- I'm open to your feedback, including things that were rejected by mainline Portage team. For best efficiency, please report bugs on GitHub [4] and/or open pull requests [5]. Enjoy! [1]:https://github.com/mgorny/portage [2]:https://github.com/mgorny/portage/blob/master/README [3]:https://github.com/mgorny/portage/releases [4]:https://github.com/mgorny/portage/issues [5]:https://github.com/mgorny/portage/pulls -- Best regards, Michał Górny