GNU Guix as an alternative to the Yocto Project
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 490 | |
Author | ||
License | CC Attribution 2.0 Belgium: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/47434 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
FOSDEM 2020269 / 490
4
7
9
10
14
15
16
25
26
29
31
33
34
35
37
40
41
42
43
45
46
47
50
51
52
53
54
58
60
64
65
66
67
70
71
72
74
75
76
77
78
82
83
84
86
89
90
93
94
95
96
98
100
101
105
106
109
110
116
118
123
124
130
135
137
141
142
144
146
151
154
157
159
164
166
167
169
172
174
178
182
184
185
186
187
189
190
191
192
193
194
195
200
202
203
204
205
206
207
208
211
212
214
218
222
225
228
230
232
233
235
236
240
242
244
249
250
251
253
254
258
261
262
266
267
268
271
273
274
275
278
280
281
282
283
284
285
286
288
289
290
291
293
295
296
297
298
301
302
303
305
306
307
310
311
315
317
318
319
328
333
350
353
354
356
359
360
361
370
372
373
374
375
379
380
381
383
385
386
387
388
391
393
394
395
397
398
399
401
409
410
411
414
420
421
422
423
424
425
427
429
430
434
438
439
444
449
450
454
457
458
459
460
461
464
465
466
468
469
470
471
472
480
484
486
487
489
490
00:00
LTI system theoryMathieu functionInternet der DingePhysical systemDistribution (mathematics)GNU EmacsAndroid (robot)Open sourceIntegrated development environmentRootkitContinuous functionWhiteboardDatabaseComputer hardwareRevision controlComputer virusWordPerspective (visual)Data managementInternet der DingeMiniDiscComputer hardwareBootingMedical imagingOperator (mathematics)DampingRevision controlRobotDifferent (Kate Ryan album)Online helpMultiplication signStorage area networkWritingPhysical systemIntegrated development environmentUniverse (mathematics)Product (business)CodeMixed realityElectric generatorPrisoner's dilemmaOperating systemComputer animation
02:57
SoftwareState transition systemReal numberWhiteboardComputer animation
03:42
CloningVirtual machineInstallation artData recoveryForcing (mathematics)Medical imagingIntegrated development environmentSource codeRepository (publishing)Type theoryDistribution (mathematics)Computer animation
04:52
Distribution (mathematics)Distribution (mathematics)Virtual machineComputer fileComputer animation
05:39
Physical systemSpacetimeService (economics)Configuration spaceParameter (computer programming)Hard disk drivePhysical systemDistribution (mathematics)Stylus (computing)Operating systemMusical ensembleProcess (computing)Formal languageDenial-of-service attackSubject indexingGoogolDeclarative programmingFunctional (mathematics)File systemMedical imagingMiniDiscNP-hardType theoryWhiteboardComputer fileVideo game consoleBootingOperator (mathematics)Field (computer science)Computer animation
07:48
Physical systemMiniDiscComputer-generated imageryElectric currentFlash memoryMiniDiscMedical imagingWhiteboardPhysical systemComputer filePlastikkarteConfiguration spaceWeightArmComputer architectureComputer animation
08:44
Substitute goodPhysical systemBit rate
09:05
Self-organizationRepository (publishing)ArchitectureMechanism designRepository (publishing)RobotPatch (Unix)Self-organizationHydraulic motorData managementGoodness of fitMereologyWindowFrequencyTheory of everythingTube (container)Instance (computer science)
10:23
State of matterRevision controlComputer hardwareCondition numberUtility softwareMessage passingIntegrated development environmentNeuroinformatikDisk read-and-write headDemosceneData miningMedical imagingCompilation albumBitMiniDiscDifferent (Kate Ryan album)Computer animation
11:16
Integrated development environmentBuildingComputer-generated imageryVirtual machineVirtual realityDistribution (mathematics)Revision controlSubstitute goodSpacetimeMiniDiscCache (computing)ArchitectureDefault (computer science)Reduction of orderVirtual machinePoint (geometry)Medical imagingFunctional (mathematics)MiniDiscBuildingConfiguration spaceModule (mathematics)Binary codeRevision controlMultiplication signFunction (mathematics)Substitute goodNeuroinformatikDistribution (mathematics)Different (Kate Ryan album)State of matterResultantMechanism designElectronic visual displayComputer architectureDenial-of-service attackTexture mappingFlow separationKey (cryptography)Disk read-and-write headSubject indexingComputer animation
13:46
System programmingPhysical systemComputer-generated imageryMiniDiscComputer fileMiniDiscRemote procedure callConfiguration spaceComputer architecturePhysical systemFunctional (mathematics)WhiteboardMedical imagingPlanningOperator (mathematics)Virtual machineParameter (computer programming)Multiplication signSystems integratorCalculationNeuroinformatikInstance (computer science)Formal languageComputer animation
15:42
Numbering schemeMiniDiscFunctional (mathematics)Physical systemLetterpress printingScripting languageMedical imagingCodecWeb pageComputer animation
16:29
Numbering schemeAreaCodecContent (media)Numbering schemeElectronic mailing listFunctional (mathematics)Computer animation
17:04
Modul <Datentyp>Mathieu functionSoftware developerServer (computing)Physical systemService (economics)Configuration spaceInheritance (object-oriented programming)Process (computing)Line (geometry)Systems integratorPhysical systemRootkitConfiguration spaceMultiplication signMiniDiscMathematicsMedical imagingRevision controlComputer fileService (economics)Sign (mathematics)FlagTwitterInstance (computer science)ArmTheoryArithmetic meanComputer animation
19:12
Limit (category theory)Computer-generated imageryLibrary catalogWhiteboardBuildingSubstitute goodNumbering schemePhysical systemSoftware developerArithmetic progressionMultiplication signFile systemMaxima and minimaSystems engineeringResultantDifferent (Kate Ryan album)Android (robot)Object (grammar)Integrated development environmentMedical imagingCASE <Informatik>WhiteboardMiniDiscTimestampLimit (category theory)Computer fileFlash memoryPoint (geometry)Configuration spaceServer (computing)Distribution (mathematics)Exterior algebraRoundness (object)Degree (graph theory)PlanningBuildingRight angleLocal ringLogic gateRow (database)Arithmetic meanLetterpress printingNumbering schemeStructural loadDistancePhysical systemNeuroinformatikDiscounts and allowancesComputer animation
25:01
Point cloudFacebookOpen sourceComputer animation
Transcript: English(auto-generated)
00:05
Hello. So glad you got my name correctly. So here is, let's start. So a few words about myself so that you can put this talk into some, so that you
00:24
can put this talk into some perspective. So I've been working as a Linux embedded engineer for the last seven years, most of the time doing drones, just like this one, and other IoT devices. To do that, I've been using tools such as Billroot, Yocto, and Alchemy, which is an
00:42
Android-based build system, but yeah, most of the time using Yocto, which is the most popular one, I think. One thing, another thing about me is that I place a high value on the tools I use every day. And so yeah, for a few years I've been switching distribution, switching desktop environments,
01:01
switching everything, kept using one software, which is GNU MX for the last decade, but yeah, never found in Billroot, in Yocto, in Android, a reliable tool that I want to carry on using, and so yeah, this is why I'm here.
01:21
So in the meantime, I discovered GNU Geeks. Few years ago, I've been quite involved with GNU Geeks. I don't know how many of you have ever heard about GNU Geeks. Ah, great. Maybe you saw Clidio talk yesterday. So GNU Geeks is many things.
01:40
It's started as a very innovative package manager based on Geeks, but now it's much more than that. It's a tool to instantiate an operating system, which is called GNU Geeks System. It's a container provisioning tool, it's a CI tool, it's yeah, it's a lot of things. And yeah, back to Yocto.
02:01
What do we expect from Yocto and such tools? We expect, obviously, a tool that you can use to generate some disk image, so that you can put them on an embedded device and boot from this disk image. You also expect that this tool has a wide support of packages and recipes and bot support,
02:20
so that you don't have to write everything from scratch. And you also expect a tool that will allow you to deal with your 10 different hardwares in 50 hardware revisions in 10 different products, and yeah, in a few words, help you cope with industrial mess, which is a real thing.
02:41
And yeah, so Yocto does everything, the other tools also. But I've been wondering, could GNU Geeks do the same thing? And if you want to stop listening, the answer is yes, but I'll expose you why. So let's take a real world example.
03:03
Let's say I have this board, which is a Pynax 64, and I want to make it fly. So there is some work.
03:21
So yeah, one solution could be to install RduPilot, which is a real nice software. It's an autopilot. You can use it to build some drones, some helicopters, some planes, some submarines, some crazy stuff. And yeah, let's say I want to install RduPilot on this board. So we'll see how it's done with Yocto, and then we'll see how it could be done
03:41
with Geeks. So how would we do that with Yocto? Let's say I'm using Ubuntu. So first I need to install some packages. Then I need to clone Yocto sources. So I use Poki, which is a Yocto distribution. Then I need to find some support for this board, which is not included in this repository.
04:03
So I have to find an extra layer, which I find there from some Mr. Alistair23 I don't know about. I clone the layer. Then I will source the environment.
04:20
Then I need to tell Yocto, hi, there is a new layer. You need to take it into account. So I write this command. And then I need to add RduPilot, the package RduPilot to my image. It doesn't exist in Yocto. So if you type this command, it won't work at this step.
04:41
But let's say it does. And so, yeah, you add RduPilot. And then you can produce your disk image. So you type this command. You'll wait. Wait. No, no, no, before waiting, you'll get this warning. It says, your host distribution, Ubuntu, has not been validated.
05:01
You may experience unexpected failures. You should use a tested distribution. So I didn't know Ubuntu was such an exotic distribution. I mean, if I've been using crazy stuff like Gantu or this system, I would have understood that. Yeah, Ubuntu command.
05:20
So yeah, I see this. I don't want to go any further because it means that, yeah, it may fail. It may fail because of my distribution. I won't know why. I'll have to dissect it. So the solution here would be to use a virtual machine or a Docker file. But I really don't want to do that. So let's keep going.
05:44
So now you wait. Then you go to sleep. Then you come back. Then you don't have any space on your hard drive anymore. But it works. You get a disk image. And yeah, it does the job. It's not that hard. You can boot from it.
06:03
So a way of doing things. Another way would be to use GNU Geeks. So GNU Geeks is based on a GAIL language, GNU GAIL, which is a skin language. So obviously, everything is written in GAIL. So you have to write GAIL.
06:23
So you write something like that, which is an operating system configuration, which tells to your Geeks what will be the disk image you want. And so you'll have to describe a few things. So you'll have to tell the hostname of your system. You have to tell the bootloader you use, which is a specific bootloader for this board.
06:45
Some fields are implicit. Like, for instance, it doesn't say I want to use Linux, but it's an implicit field. I could use another thing in the future, like Hurd or stuff. I have to specify some modules, the file system I want to use, the packages, which
07:01
are the base Geeks packages plus RDPilot, which is packaged in Geeks, which I did package in Geeks for this talk. And some services. So I take the base services and add a console service. And GNU Geeks is a functional distribution, which means that you apply functions to functions
07:24
and who checks functions as arguments. So to go from this operating system declaration to your disk image, obviously you need to apply your function. And that function will be, hey Geeks, please take my operating system and make a disk image from it. And that's pretty much it.
07:41
I mean, you can start any R-E-P-L, type this function with this file as argument, and you'll get a disk image. You can also use a command to do that, which is quite obvious. You say Geeks, I want a system, a disk image system from the configuration file I show
08:02
you, and I want it for this board architecture. Then you wait. You may wait a few minutes if everything goes, but yeah, I'll get there. And then when you have the disk image, you can flash it on an SD card.
08:23
You plug the SD card on the board, and it works too. So some of this stuff is mainline. Some will come real soon. If you try this on the current release, it won't work, but it may work in the future.
08:43
And now the question is, I know. So yeah, you get something like that. You have a Geeks operating system. You can see that RDCopter is running, and in short, you have to write one file, run write command, wait a few minutes, and then you get a system which does exactly
09:03
what you want. And the question is, does it fly? So yeah, I can throw it out of the window, but it may not be an RDPI supported flight management. So yeah, might find some motors and stuff first, but the hardest part is done for us.
09:25
So now you know how it's done with Geeks and Yocto, let's talk about the two tools. So they have a different organization. Yocto has many layers maintained by different entities. So for instance, you can see that there are some open-embedded layers, which are some
09:42
kind of official layers with good support. And there are some layers which are quite unofficial, like the one I used for the board, and the quality can vary a lot. And Geeks has a different approach. We have only one Git repository with every package, every bot supported.
10:03
While you can add some extra repositories with extra recipes, it's not the recommended way of doing things. I mean, adding some patches is just one patch to one Git repository. Everyone can do that, it's very simple.
10:20
So we have different organizations. One thing I want to talk about is build reproducibility, also called deterministic compilation. So yeah, both Geeks and Yocto aim for reproducible builds if you read their documentation. But if you read the Yocto wiki, it says, depending on circumstances, it may help to
10:45
build on the same distro with the same packages installed in the same path, and using the same build hardware. So it can be quite tricky. And what it means is that my colleague Alice can build my disk image on her computer with
11:04
her distribution, and I can take the exact same sources, and it will fail on mine. I won't know why. Yeah, I can know why, but with new Geeks, things are a bit different.
11:21
Geeks is building in isolated environments, and you can expect that you'll get the same result even if you are running completely different host distributions on different hardware, and using different build paths. The only thing that matters is that you run the same version of GNU Geeks.
11:42
If you run the same version of GNU Geeks, you have the guarantee that you have a stronger guarantee at least. You don't need to use a Docker image or a virtual machine. Yeah, I think it's a good point.
12:01
Another thing is that to build packages in Geeks, as I told you, it's functional, so you have to write a function that knows how to build the package. So it's a function that says, okay, run make and configure and make and make install, and you have to give this function some inputs, which are the package dependencies, and you
12:21
get one output, most of the time a binary. Geeks has an official CI build form, which does all this stuff ahead of you, and when you start building your disk image, it will ask the server, hey, have you ever done this computation with this Geeks version and those inputs?
12:42
And if it says yes, then you just download the output file, and it will be much faster. If this package is Linux with all modules enabled, you'll be really glad that it did. You can also, with GNU Geeks, use offloading, so you can set up several machines on several
13:05
architectures, and you can offload quite transparently the build to those machines, which is very nice too. And Yocto has kind of the same mechanism about what we call substitutes in Geeks. It's called share at state.
13:21
It's kind of what I described, but it means that if your build machine is running a slightly different distribution, or if it is ahead of you, there were some update which modified the versions, chances of hitting substitutes and getting substitutes from the build machine are reduced, and are very reduced, and that's something that, yeah, we don't have in Geeks.
13:48
And one other cool thing is that, remember the configuration file I wrote? I can do many things with it. I can build a disk image for my host architecture. I can build a disk image for a foreign board architecture, which is what I did earlier.
14:06
I can also reconfigure my system if I'm already running a Geeks system using the same configuration. I can also spawn a disk image. I can make a Docker container out of it, or I can deploy it to remote machines by SSH,
14:22
and all of this, with almost the same configuration, you can do all this stuff. Another cool thing is that Yocto is written in like, Bash, and BitBake language, and Python, and makes lots of languages, and Geeks is written in only one language, and
14:45
it means that you can use it to build upon your disk image, and, for instance, let's say I build a copter earlier, and I want to change my mind and build a plane instead. So, I can write a function that takes a vehicle in argument, and returns an operating system,
15:07
which inherits from the one I showed you earlier, and whose packages will be depending on this function, who, again, takes the vehicle, and if the vehicle is a copter,
15:22
it will use the Arduino copter package, which is a variant of Arduino pilot, and if it's a plane, you can use the Arduino plane package. And then, all you have to write is, make vehicle copter, or make vehicle plane, and you get either a plane or a copter, and having this flexibility is really nice, I think,
15:45
as a system integrator, and you can build a lot of tools upon your Geeks system. I'll give you other examples. Let's say I want to know all the licenses. I have all the licenses of my packages, which are involved in my disk image, so I can start
16:04
GeeksIRPL, or run a script, which says, okay, for all the packages in my operating system, get the license, and get the license name, and print it, and then you get all the licenses
16:20
involved in your disk image, just calling, like, three functions. And if I want to know all the packages which are licensed with GPLv3, it's quite easy too. I call the same function to get the packages, then I get the licenses, and then I can filter
16:46
them depending on the license, and then again, I have the list of packages which are licensed with GPLv3. But Geeks can be seen as a scheme library, so I can do pretty much what I want.
17:07
Yeah. And now let's say I don't have a strong knowledge in GNU Linux and stuff. It happens sometimes, I mean, you have a team in industry, you have a team of people
17:20
who are, their job is to do system integration, and then you have engineers, which are a signal engineer, which runs, spends all their time in MATLAB, and sometimes they want to tweak a package, like add a conflict with your flag, change some things on the disk image, and if it's two of them, it's okay, but if it's 100 of them, you want them to
17:43
be quite independent and do the stuff by themselves so that they don't have to go and bother you, and you don't have to explain to them what is Ubuntu and Git and BitBake and Pocky and, yeah, and repo, and yeah, it can be very fast for them.
18:03
So with Geeks, the nice thing is that everything starts from the configuration file. So if, for instance, they want to take your image and add an SSH server, they can inherit, as I did earlier, from your system.
18:21
They can add one services, which is OpenSSH, and they can tweak some parameters, which are, yeah, a root login, add one also writes key, which is my key, and run on a different port, and it means that they don't have to add an extra layer, make it
18:41
imaginary from SSH-D, then add an SSH-D configuration file, modify it, they just have to read the documentation, find the suitable service, use the correct configuration, and they can refresh an image. This is true for OpenSSH, but this is true for most services.
19:05
You can write your own services, obviously. I think it can be quite handy. Now, some limits, I mean, yeah, it's the last slide.
19:24
Well, Yocto and Bilout and Android have been there for a few years, I mean, a lot of years. They work, like, they work pretty well, they have a wide, wide board of, support of boards and packages, and those, yeah, those are nice tools.
19:45
Geeks comes mostly from, I mean, at start, people use it as a desktop distribution, so it's recent that we started hacking on embedded devices, and this means that while you build, you will have many packages that build natively.
20:06
I mean, you can build Git on your computer, you can build every other packages. If you try to cross-compile them, well, it may fail because no one has tried before you. The main use case of Yocto and Bilout is to cross-compile packages, so obviously, yeah,
20:23
more packages are cross-compiling. Another limit is that the image is, the image I produced earlier, the disk image, is not that minimal. With Yocto, it was 300 megabytes, and with new Geeks, it's 1.5 gigabytes.
20:41
I mean, there are no good reasons for it to be 1.5 gigabytes, it could really be like 300 too, but we have to spend some time, and as I said, it's not been a lot of time working on this stuff, so we have some progress to do. Also, we don't have support for the minimalistic ellipse, like, yeah, the ellipse, everything.
21:05
We just use the plain G ellipse, mostly, and we have support for like 10, 15 boards, which is nothing compared to Yocto and France. But, anyway, I think that GnuGeeks is already, or almost already, an alternative to Yocto.
21:27
I mean, you can do what I want, you can, yeah, in the future Geeks series, you can download Geeks, get your board, write your configuration file, and flash it. And it may be really, really fast.
21:43
I mean, if the CI server has been doing this stuff ahead of you, building the disk image is like 5, 10 minutes, and it won't take 50 gigabytes, it can be very fast, and it can be really easy too. You don't have to inspect layers, you just have to write one configuration file, and
22:00
the schema API can really be nice, I mean, both for system engineers and both for developers. And, most important point, GnuGeeks is like really fun, and you should come help us. So, thank you for your attention.
22:28
Yeah, I guess we have time for some questions. So, you mentioned binary reproducibility. What guarantees do you give, is it just, you know, it will be roughly the same, or is it really binary, so I can build the image, I can build it tomorrow, and it will
22:43
have the same objects on it? Yeah, I tried to use the right vocabulary, which is quite complicated, but what I mean is that we offer strong guarantees, like building an isolated environment in containers,
23:01
with well-known inputs, so you have good chances that you'll get the same results from one disk image to another disk image, and different distributions and stuff. But, if one package is including a timestamp in your binary, then you get a different result, and it's true with Yocto, it's true with Geeks, it's just that you have stronger
23:24
guarantees, stronger chances to get reproducibility with Geeks. But you already handled things like the file system, and the file system itself, and I don't know, these quotation labels and stuff like that. Yeah, I guess.
23:51
Yocto generates packages, and also SDKs. Geeks can do that also, or maybe it's plain to do?
24:02
I mean, the point of the, so the question is, with Yocto, you can build some SDKs, do we have the same feature with Geeks? With Yocto, it is often very useful to have this SDK, because you can ship it to teams, so that they don't have to download everything, and they have a nice environment to hack.
24:24
That's something I didn't show with Geeks. But you have also some really powerful tools to hack in a given environment, to build your packages, your native packages. I mean, it's not some really, really dedicated tools like the SDK.
24:40
It's more how Geeks does stuff, but I didn't have any commands like Geeks environment, Geeks that can do pretty much the same thing, without being a specific thing like the SDK. Okay, so it's time's up. Thank you, everyone.