Gentoo Archives: gentoo-project

From: Daniel Robbins <drobbins@××××××.org>
To: "Tiziano Müller" <dev-zero@g.o>
Cc: gentoo-project@l.g.o
Subject: Re: [gentoo-project] Making Gentoo more fun
Date: Sat, 17 Feb 2018 11:34:52
Message-Id: CAPDOV4-j0hzseG7P9zAHMfk_ZrvVvX2J6boQeSNjK6Azte3O0A@mail.gmail.com
In Reply to: Re: [gentoo-project] Making Gentoo more fun by "Tiziano Müller"
1 On Sat, Feb 17, 2018 at 2:29 AM, Tiziano Müller <dev-zero@g.o> wrote:
2
3 > Hi Daniel
4 >
5 > I haven't thought enough yet about the actual proposal to comment on it,
6 > but this systems seems to be similar to what openSuse has: projects
7 > taking care of a set of packages in a bleeding edge manner, occasional
8 > snapshots of those projects (or single packages?) make it into a final
9 > distro, which afterwards gets backports only. Or am I wrong?
10 > There it seems to work quiet well so far, except for some packages
11 > shared between all the projects (like the compiler), which are then
12 > lagging behind. How do you avoid this or similar issues of
13 > cross-dependencies between the kits? Especially with the possibility of
14 > changing dependencies with USE flags?
15 >
16
17 Well, Funtoo used to lag far behind Gentoo when it came to glibc and
18 compiler, due to being a much smaller project. But we have found that this
19 new system actually allows us to accelerate our adoption of newer things,
20 since we spend less time triaging breakages. Rather than focus so much
21 effort on bumping packages in the main tree, we have the freedom to make
22 more aggressive changes in the non-prime kits as we get them ready. We have
23 a stability rating system for our kits, so we can tag one as 'development
24 only' and hack away at it. So the development effort happens in kits that
25 users are not (yet) using directly. But it can happen more efficiently.
26
27 As far as USE flags, we have found a number of elegant solutions. Before
28 explaining, let me strip away some of the magic. Kits are of course
29 essentially overlays. And the different versions of kits are git branches.
30 Our core kit contains all the core system stuff, and a complete set of
31 eclasses, as well as the profiles. Other kits contain their collection of
32 catpkgs, as well as a snapshot of eclasses they use (taken from the same
33 snapshot to help ensure compatibility). We can add newer versions of
34 eclasses as needed, if necessary. Then we have "nokit", which is our
35 default kit of leftover catpkgs that we have decided not to create kits for
36 yet.
37
38 Here is one technique we use to support the flexibility of users changing
39 kit branches. We can move profile stuff related to gnome into the gnome-kit
40 itself, so that changing your gnome-kit also allows for the gnome profile
41 to automagically have new profile settings. We can do this by having the
42 gnome profile in core-kit reference gnome-kit:foo/bar/gnome-profile.
43
44 Next trick. As you know, there are python ebuilds everywhere, in all kits.
45 And users may want to switch their python-kit. But then, do all the
46 python-use settings become broken? Actually, no, there is an elegant
47 solution to this. Before kits, I had a script that would automatically set
48 the correct python-use settings so that everything would work -- assuming
49 you were using python-3.4, that is. But let's say you want to use
50 python-3.6. Does that meant that all the python-use settings in the tree
51 are now broken for you? Nope.Thanks to Funtoo's multi-profile system, my
52 "system profile" looks like this:
53
54 core-kit:funtoo/1.0/linux-gnu/arch/x86-64bit
55 core-kit:funtoo/1.0/linux-gnu/build/current
56 core-kit:funtoo/1.0/linux-gnu/arch/x86-64bit/subarch/intel64-haswell
57 core-kit:funtoo/1.0/linux-gnu/flavor/desktop
58 core-kit:funtoo/1.0/linux-gnu/mix-ins/gnome
59 nokit:funtoo/kits/python-kit/3.6-prime
60 haskell-kit:funtoo/kits/python-kit/3.6-prime
61 media-kit:funtoo/kits/python-kit/3.6-prime
62 xfce-kit:funtoo/kits/python-kit/3.6-prime
63 xorg-kit:funtoo/kits/python-kit/3.6-prime
64 perl-kit:funtoo/kits/python-kit/3.6-prime
65 gnome-kit:funtoo/kits/python-kit/3.6-prime
66 games-kit:funtoo/kits/python-kit/3.6-prime
67 core-hw-kit:funtoo/kits/python-kit/3.6-prime
68 desktop-kit:funtoo/kits/python-kit/3.6-prime
69 ruby-kit:funtoo/kits/python-kit/3.6-prime
70 security-kit:funtoo/kits/python-kit/3.6-prime
71 java-kit:funtoo/kits/python-kit/3.6-prime
72 php-kit:funtoo/kits/python-kit/3.6-prime
73 core-kit:funtoo/kits/python-kit/3.6-prime
74 ml-lang-kit:funtoo/kits/python-kit/3.6-prime
75 kde-kit:funtoo/kits/python-kit/3.6-prime
76 lisp-scheme-kit:funtoo/kits/python-kit/3.6-prime
77 editors-kit:funtoo/kits/python-kit/3.6-prime
78 text-kit:funtoo/kits/python-kit/3.6-prime
79 dev-kit:funtoo/kits/python-kit/3.6-prime
80 lang-kit:funtoo/kits/python-kit/3.6-prime
81 science-kit:funtoo/kits/python-kit/3.6-prime
82 net-kit:funtoo/kits/python-kit/3.6-prime
83 python-kit:funtoo/kits/python-kit/3.6-prime
84
85 It looks complicated but is actually all quite simple. Every kit has an
86 embedded python-kit/3.6-prime and python-kit/3.4-prime profile. These
87 profiles contain the proper python-use settings for the python-using
88 ebuilds in that particular kit branch. So if you switch from python-kit
89 3.4-prime to 3.6-prime, ego, our configuration tool, automatically adjusts
90 your profile to point to all those 3.6-prime profiles in each kit. Now your
91 python-use settings are perfect.
92
93 So there are a number of elegant solutions to manage these things. We also
94 have full automation of our kit generation. We actually use two primary git
95 trees to generate our kits -- one is the gentoo tree, of course, and the
96 other is a tree called kit-fixups. Our merge scripts select catpkgs from
97 the gentoo tree using package lists, which can also do things like select
98 all catpkgs from a category that use a specific eclass, and other neat
99 tricks to efficiently select catpkgs, and then we add our forks and fix-ups
100 on top of this. By updating the kit package lists, we have the ability to
101 move a catpkg from kit A to kit B totally transparently. The next time a
102 user syncs, it is gone from kit A and in kit B and causes no issues for
103 Portage or users. This is due to the design of our sync system which
104 ensures that you are using kit commits that are designed to work together.
105
106 Bigger picture -- yes, there will always be interdependencies between kits
107 and these need to be managed carefully. But, we have the ability to create
108 new kits as needed, and move catpkgs to and fro as needed, and this does
109 not impact users at all -- it's totally transparent -- so this helps a lot.
110 And it is easier to track interdependencies between 10 trees than have one
111 huge monolithic tree where the interdependencies are effectively not
112 tracked at all (at least not formally.) At least you can start the process
113 of mapping the interdependencies between the kits and understanding how one
114 kit connects to another kit and what the potential impacts of changing
115 things are. I think that's actually an important thing to begin doing --
116 start breaking down the dependency problem into smaller, more manageable
117 chunks.
118
119 I hope that gives you a bit of insight into the system. This news post is
120 somewhat out-of-date but gives you some perspective about my reasoning for
121 moving to a kits system:
122 https://www.funtoo.org/News:New_Ports-2017_tree_and_Kits (the parts that
123 are italicized have the key points)
124
125 Anyway, although I am happy to talk about the kits system in Funtoo, what I
126 am hoping is that having a more flexible system in Gentoo could provide the
127 ability for more junior developers to work in a kit that doesn't directly
128 impact users, but still do important work. And then have a workflow that
129 gradually promotes this kit to being a 'prime' kit when it has been
130 thoroughly tested. If we improve quality in Gentoo, and have processes that
131 support this, it will give newer developers a more pleasant environment to
132 ramp up and also provide the quality assurance systems that senior
133 developers really want to see moving forward, so they can relax a bit. The
134 goal is for the processes and technology to help support positive
135 collaboration and, yes, 'fun'.
136
137 Best,
138
139 Daniel

Replies

Subject Author
Re: [gentoo-project] Making Gentoo more fun Alec Warner <antarus@g.o>