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 |