[00:00.000 --> 00:11.780] There was a lot of talk about like geeks used in scientific environment for doing like [00:11.780 --> 00:19.720] reproductive research, like in geeks conference, geeks birthdays and even here before my talk. [00:19.720 --> 00:25.280] So this will be a completely different usage of geeks. [00:25.280 --> 00:30.680] So I will present first what is replicant, so fully free Android distribution and how [00:30.680 --> 00:37.040] we manage to use geeks or fail to use it basically. [00:37.040 --> 00:45.120] So yes, there is a lot of issue in smartphones. [00:45.120 --> 00:51.360] So for instance like people still have to use them to be reachable, to do mobile computing [00:51.360 --> 00:55.760] like in some country, mobile banking and so on. [00:55.760 --> 00:58.800] And it's also like often cheaper than laptops. [00:58.800 --> 01:01.200] So a lot of people use them. [01:01.200 --> 01:08.480] But yeah, the issue is that like it's to produce the smartphone like you have to mine metals [01:08.480 --> 01:09.480] and so on. [01:09.480 --> 01:11.880] So it's not good for the planet. [01:11.880 --> 01:16.560] The networks also know your location like it spies on you, the smartphones run on free [01:16.560 --> 01:17.800] software. [01:17.800 --> 01:22.560] So it's even not clear if like smartphone can really empower people because you can take [01:22.560 --> 01:29.680] pictures and things like that so you can get proof of stuff, but you also get spying. [01:29.680 --> 01:38.360] So not using smartphone is not really a solution because a lot of people use it so political [01:38.360 --> 01:44.320] activists, journalists and so on, even indigenous people for their security. [01:44.320 --> 01:53.600] So yeah, like destroying smartphone and factory is not a good option and it requires like people [01:53.600 --> 01:57.200] to have people willing to do that and to support them. [01:57.200 --> 02:02.400] So the option to fix all that stuff would be like free software so we can make for instance [02:02.400 --> 02:09.240] smartphone last longer and block some of the spying but not the fact that the network [02:09.240 --> 02:10.800] know your location and so on. [02:10.800 --> 02:17.480] So we can limit basically some of the risk and also other way to help than programming [02:17.480 --> 02:23.880] like doing political pressure and funding like doing work to get funds to fund people [02:23.880 --> 02:25.880] to do stuff. [02:25.880 --> 02:32.440] So we want 100% free software and to be usable and like I said limit the damage. [02:32.440 --> 02:41.480] So historically we like worked to fork line address and make sure we don't ship any non [02:41.480 --> 02:45.240] free software. [02:45.240 --> 02:53.880] So the idea is like to have 100% free software, Android distribution. [02:53.880 --> 02:59.800] So yeah, like Geeks basically. [02:59.800 --> 03:04.160] So this is a smartphone, you have a modem here. [03:04.160 --> 03:10.680] So this communicates with the tower and also like as access to your SIM card and it's connected [03:10.680 --> 03:17.760] also to main system on a chip on this one. [03:17.760 --> 03:23.080] So the issue is like you have a very high DPI on smartphone like the screen is very [03:23.080 --> 03:27.040] small with high resolution. [03:27.040 --> 03:34.280] So you cannot also use it with very big fingers and usually you have no hardware keyboards. [03:34.280 --> 03:41.160] So this is also why we are trying to use Android on smartphone because it's already works. [03:41.160 --> 03:43.720] So yeah. [03:43.720 --> 03:50.960] So you have like for instance several hardware you can choose from, for instance this could [03:50.960 --> 03:54.400] run with Geeks for instance. [03:54.400 --> 04:00.520] The pine phone, so you have like really the status you have nothing ideal yet. [04:00.520 --> 04:09.760] Yeah, the lot of phone like don't boot with free software in other like the modem, yeah [04:09.760 --> 04:14.800] it's isolated from the system on a chip so it can't access its RAM like take control [04:14.800 --> 04:19.200] of the operating system and so on. [04:19.200 --> 04:26.960] And like hardware usability on GNULINUX, it really depends. [04:26.960 --> 04:31.520] Like power consumption for instance on the LibreM5 is probably good enough and the pine [04:31.520 --> 04:36.120] phone it's like not there yet but it could be improved. [04:36.120 --> 04:39.720] So yeah. [04:39.720 --> 04:46.400] So we have like some fully free distribution like PureOS it works right now, it supports [04:46.400 --> 04:55.000] one device, replicant 6 it's really old it's still based on Android 6 so it has a security [04:55.000 --> 04:56.000] issue. [04:56.000 --> 05:05.880] Geeks it could probably work but it's like missing a lot of package probably. [05:05.880 --> 05:12.560] We need like probably to have like GNOME working on smartphone and so on to be able to use [05:12.560 --> 05:20.400] it and other fully free distribution they also like lack packages but you also need [05:20.400 --> 05:27.000] like for instance package to support the modem and integrate all that in the distribution [05:27.000 --> 05:34.040] so for instance for the pine phone it's as I understand there was a talk at FOSDEM last [05:34.040 --> 05:40.840] year and it's doable to package it in distribution relatively easily. [05:40.840 --> 05:46.680] So as I said replicant is like fully free software Android distribution, supports some [05:46.680 --> 05:54.560] old device and we are trying to like get it working on Android 11 still. [05:54.560 --> 06:00.800] So yeah I probably already explained why it's based on Android. [06:00.800 --> 06:08.160] So Android is like far from ideal because we don't lack any package manager during builds. [06:08.160 --> 06:15.840] So for instance distribution like Geeks you have an abstraction that can compile for instance [06:15.840 --> 06:20.960] software written with auto tools that can build with auto tools, CMake and so on. [06:20.960 --> 06:27.640] Android you have everything that's downloaded and put in the same tree so this is a big [06:27.640 --> 06:33.440] issue because we can't easily mix GNU linux with Android because Android you have everything [06:33.440 --> 06:39.280] like you have Android.mk or Android.bp it's their build system and everything is integrated [06:39.280 --> 06:46.440] together so you don't have this abstraction and also the code like it's less fun to work [06:46.440 --> 06:52.520] with with Android and like you have huge code that's not really known or very well known [06:52.520 --> 06:59.000] or detected from the free software community and we also have like issue with application [06:59.000 --> 07:05.680] for instance fdroid it's really great it has like strict licensing policy but it requires [07:05.680 --> 07:11.120] the non free Android SDK in practice to build applications. [07:11.120 --> 07:17.520] So that's maybe something that Geeks could solve one day. [07:17.520 --> 07:26.600] So the Android architecture it's it's meant really for getting like selling phones so basically [07:26.600 --> 07:32.240] at the beginning you had a modified linux kernel for instance you could have like completely [07:32.240 --> 07:39.320] different audio driver and it talks to a hardware library that makes the abstraction between [07:39.320 --> 07:45.040] the kernel and the Android frameworks so Android application talks to the Android framework [07:45.040 --> 07:48.200] and can play audio for instance. [07:48.200 --> 07:54.880] So still today there's a lot of fun that are not like supported by upstream linux so there [07:54.880 --> 08:06.880] is still like need of it still work like that and the situation is still not that good. [08:06.880 --> 08:13.520] So the security model also is Android sandbox application and linux it's much more like [08:13.520 --> 08:21.520] simple for users because in Android you often like have malware in Google Play that's removed [08:21.520 --> 08:27.960] by Google obviously but it's meant like not to trust the software while in GNU linux it [08:27.960 --> 08:35.480] trusts basically the software so it's much more easy you have root and so on. [08:35.480 --> 08:45.280] So yeah maybe I will skip that yeah no maybe not so basically in replicants we try to replace [08:45.280 --> 08:51.400] non-free code and now we are trying like to support device with upstream kernel but yeah [08:51.400 --> 08:55.480] it takes some time basically. [08:55.480 --> 09:03.560] So now I will get to the geeks specific stuff finally when I got all the background done [09:03.560 --> 09:07.480] can we run geeks on top of replicants. [09:07.480 --> 09:12.680] So replicants 6 is a very old distribution so I tried and it doesn't work we can use [09:12.680 --> 09:20.040] for instance Geekpack trying to like deploy binaries but you need a matching kernel with [09:20.040 --> 09:28.880] kernel headers so when you build it the application run and for instance changing the kernel header [09:28.880 --> 09:36.880] in geeks besides requiring to recompile everything I tried and it didn't work for me but we can [09:36.880 --> 09:43.880] run it on like recent Android versions so we simply use Geekspack and we can deploy like [09:43.880 --> 09:50.760] command line application to Android so it's really easy it's just cross compile the application [09:50.760 --> 09:56.440] so you still have like a lot of limitation with cross compiling because some build system [09:56.440 --> 10:02.520] don't support cross compiling for instance you can't like you can't run GNOME apps but [10:02.520 --> 10:09.360] you cannot even compile them because it will use like build system that are not supported [10:09.360 --> 10:15.240] for cross compiling and this is also useful if we want to support like smartphone in geeks [10:15.240 --> 10:22.960] because if we manage to cross compile software we could build image that are then can be downloaded [10:22.960 --> 10:31.040] from geeks website like for the pine 64 no pine book everything is cross compiled because [10:31.080 --> 10:42.400] the builder run on x86 machines so yeah and we would like in replicant to like support [10:42.400 --> 10:51.480] using geeks but it's really too big to ship so instead we will try to implement the missing [10:51.480 --> 10:58.400] dependency and maybe add an installer based on geeks install this is the standard way to [10:58.400 --> 11:07.120] install geeks on existing distribution so this doesn't work basically we cannot do like [11:07.120 --> 11:13.920] Android package yet in geeks so the issue is we would need like a real Android indicate to do [11:13.920 --> 11:22.440] that because Android use a different Lipsy that's bionic so maybe if like people want to do it [11:22.440 --> 11:32.520] new like target like for cross compilation would need to be added but this is probably a lot of [11:32.520 --> 11:41.480] work but yeah the issue is also in in Android application and maybe in lot of modern programming [11:41.480 --> 11:48.520] language when you install something like with pip install it will install a lot of dependency [11:48.520 --> 11:58.040] and basically you don't really know what's in there for instance for for like JavaScript it's [11:58.040 --> 12:06.840] npm you can have a lot of dependency and you you really lose control so if geeks would be able [12:06.840 --> 12:14.760] to like build Android application it would be a way to fix the SDK issue the fdroid is having and [12:14.760 --> 12:22.600] also like really know what's inside the application and control it then there is the issue of can we [12:22.600 --> 12:34.680] build an Android distribution with geeks so as I said there's a Lipsy difference so the issue is that [12:35.400 --> 12:41.160] yeah I sorry I already explained that the Android build system it's you don't have like package [12:41.160 --> 12:48.760] definition in it so this has issue of licensing and no abstraction for the build system like auto [12:48.760 --> 12:57.400] tools cmax and so on so Android usually like requires huge resources to build because again [12:57.400 --> 13:03.160] you don't have like package manager so you have to build everything at once as far as I know [13:03.160 --> 13:12.680] and so can we like if we package for instance all Android in geeks there has been work that [13:12.680 --> 13:25.080] has started to do that you hit some issue for instance the the Android build system geeks [13:25.080 --> 13:32.520] supports android.mk so it's it supports the old Android build system so this is why it's probably [13:32.600 --> 13:43.640] limited to Android 7 and the newer android.bp with blueprints need to be supported to like be able [13:43.640 --> 13:51.400] to build Android components and also it would be tied to glipsy I don't know if it would work but yeah [13:52.360 --> 14:02.120] maybe it works so but yeah the advantage also it would be easier to build since you could [14:02.120 --> 14:07.720] just use geeks on an existing distribution again you would know like the licensing on the package [14:07.720 --> 14:14.600] how it's done you wouldn't have this build problem of building everything you could just build a part [14:14.600 --> 14:22.920] of it so it would fix a lot of issue but the the issue is that if for instance replicant does that [14:22.920 --> 14:29.560] we would be tied to geeks and there is also there is the real risk of like not be being stuck at [14:29.560 --> 14:35.160] some point because geeks is it's it's really nice it's strict for like programming language [14:35.800 --> 14:43.320] and so on it tries to bootstrap things like even make you use a shell script to like bootstrap make [14:43.320 --> 14:49.160] you cannot use make to bootstrap make sometimes there are exceptions like for haskell where geeks [14:49.160 --> 14:55.960] use a binary compiler to bootstrap the compiler but usually it's done well so it it takes time [14:55.960 --> 15:02.680] basically to like add newer android build system and julien lepellier did did a talk about that [15:02.680 --> 15:11.320] explaining all all the effort required required for that so yeah it's it would be a big bet and [15:11.320 --> 15:19.880] it would be risky so use for instance using geeks inside the android build system for like I don't [15:20.120 --> 15:27.080] know building the kernel or and putting the binary inside maybe it would be a better solution for that [15:27.080 --> 15:37.880] or even like trying to use like geeks shell for instance to make like to install a required [15:37.880 --> 15:46.200] package to make a container of it it's really really simple you do geekshell.c-f because you [15:46.200 --> 15:54.760] can now have fhs option you have like a standard distribution with user bin etc you don't have [15:54.760 --> 16:03.000] everything in slash GNU anymore or at least that's how the tools see it and so you that's how for [16:03.000 --> 16:11.560] instance bitcoin can be built inside bitcoin core you have a way to build a reproducible binary and [16:11.560 --> 16:18.520] it use geeks in the background not with fhs yet but it was done before but that's how it works basically [16:19.320 --> 16:27.240] so you can use it to build stuff but and android it's also isolated from the host when building [16:27.240 --> 16:33.720] stuff so it doesn't it tries to avoid using like python from the host and so on so it could probably [16:33.720 --> 16:48.440] work so this is like how where we yeah so we we still have like some real use case of geeks [16:48.440 --> 16:55.880] and we will go into it for instance like we use all distribution to build android because android [16:55.880 --> 17:01.720] the android version we use require that so like using geeks to ship some more recent tools [17:02.520 --> 17:09.800] that are required works basically and one of the big use cases so it's also automatic testing [17:09.800 --> 17:16.920] because a lot of projects use things like docker and again you don't know what's in the container [17:16.920 --> 17:23.640] it's like you give control to docker hub you you don't like host your own infrastructure and so on [17:23.640 --> 17:31.960] and with geeks it's much more easy to like do it without like depending on infrastructure like that [17:32.760 --> 17:41.640] so basically we have a modem and we have a library that talks to modem drivers it's a bit like i don't [17:41.960 --> 17:52.280] know qmi and things like that so this is specific for samsung phones so we can use geeks.scm [17:53.480 --> 17:55.240] to test that automatically [17:55.400 --> 18:12.120] so this is in some software mainly guile software and geeks obviously [18:13.320 --> 18:20.440] you have some people writing files like that where you have a package sorry wrong file [18:25.960 --> 18:29.480] uh yes you have you have package definition [18:33.240 --> 18:34.440] like that for instance [18:36.840 --> 18:42.920] sorry yes here so people use package definition to be able to automatically [18:43.960 --> 18:48.040] ah five minutes sorry to automatically test software [18:48.760 --> 18:58.760] um so we use that to like test this library when built with gnu linux with gcc [18:59.800 --> 19:10.920] silang and silang and also with the android build system uh so uh basically sorry so in the [19:10.920 --> 19:25.720] android build system you have uh like sorry uh yes you have like targets like that so this is to [19:25.720 --> 19:36.920] to build a tool so there is the the source code here and you have um sorry uh yes it's that one [19:36.920 --> 19:42.920] so geeks has an android build system which is a project that's just a mac file that includes the [19:42.920 --> 19:49.720] android specific mac file that can then build targets so it's it's pretty limited because [19:50.680 --> 19:58.200] it's really nice because it's simple but because it's mac file based uh here it includes the android [19:58.280 --> 20:08.040] the specific file to build software but you can have only one target so what we can do is in geeks.sm [20:08.040 --> 20:16.680] we parse the file and we uh basically we compile it for all targets and we can even like run val [20:16.680 --> 20:27.400] green and a lot of stuff inside uh so yeah uh how many how many minutes three questions okay uh [20:28.840 --> 20:36.600] sorry so we also use geeks for some of uh infrastructure so basically i did this talk because [20:37.800 --> 20:45.960] like there is a lot of presentation on geeks for like scientific software but less on other use case [20:46.520 --> 20:47.640] so do you have questions [20:51.080 --> 20:58.200] yeah uh what did you uh what triggered you to use geeks for uh [20:58.200 --> 21:08.360] a replicant building uh basically uh it's to like have a complete uh test treat uh that's uh [21:09.320 --> 21:14.120] without much complexity oh can you repeat the question sorry [21:16.840 --> 21:24.040] what triggered you to use geeks uh for uh to use geeks for building [21:25.640 --> 21:34.280] for yeah for doing tests it's fine uh so if i wanted to do test i can't do all the tests [21:35.080 --> 21:41.000] for instance with the various leapsy build system uh usually in autotools you have like [21:42.040 --> 21:47.400] you can run scripts but you can't rebuild the stuff with other dependencies so it's really not [21:47.400 --> 21:53.400] supported so the flexibility here it's like really huge you can test almost everything [21:53.400 --> 21:59.720] and you even like have uh power pc support so you can test for big and yand too so it's uh yeah [21:59.800 --> 22:00.440] other question [22:11.960 --> 22:19.640] replicants uh so what is the future of replicants so i'm trying to get funding through an lnet [22:19.640 --> 22:25.880] again to support the pine fun in replicants and make glow droid squad reusable easily by other [22:25.880 --> 22:33.720] distribution and also uh part usb began to the pine fun to to android basically to isolate the [22:33.720 --> 22:39.480] modem because the modem could like try to become a keyboard it's really easy to do with a usb uh [22:39.480 --> 22:46.440] gadget and then like start typing commands so we really want to isolate the modem uh is there [22:47.160 --> 22:55.640] other question or yes are you investigating using nix instead of wix ah so we are fully [22:56.360 --> 23:04.600] can you repeat the question uh sorry um have you considered using nix instead of gix uh no [23:06.680 --> 23:14.600] because nix is not uh validated by the dfsf and we are so we need to use like stuff that's fully [23:14.600 --> 23:20.680] free and so we would need like to maybe fork nix and it's a lot of work [23:25.640 --> 23:27.100] you