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 |
> |