Gentoo Archives: gentoo-project

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

Replies

Subject Author
Re: [gentoo-project] Making Gentoo more fun Rich Freeman <rich0@g.o>