Project

General

Profile

Upstream » History » Version 426

Denis 'GNUtoo' Carikli, 11/26/2022 04:03 PM
Order Android distributions alphabetically

1 12 Denis 'GNUtoo' Carikli
h1. Upstream Linux
2 1 Denis 'GNUtoo' Carikli
3 57 Denis 'GNUtoo' Carikli
{{>toc}}
4
5 362 Denis 'GNUtoo' Carikli
h2. Tracking upstream patches
6 100 Denis 'GNUtoo' Carikli
7 362 Denis 'GNUtoo' Carikli
We have a "new issue tracker":https://redmine.replicant.us/projects/upstreaming/issues for tracking upstream status of various patches.
8 100 Denis 'GNUtoo' Carikli
9 11 Denis 'GNUtoo' Carikli
h2. Benefits of using Upstream Linux
10 2 Denis 'GNUtoo' Carikli
11 11 Denis 'GNUtoo' Carikli
Currently, Replicant uses device specific Hardware Abstraction Layers, because device manufacturers implemented non-standard kernel interfaces. However, Android works with upstream kernels and supports plug-n-play hardware nowadays, so it makes sense to have generic Hardware Abstraction Layers for the standard interfaces of the Linux kernel (ALSA, V4L2, etc).
12 2 Denis 'GNUtoo' Carikli
13
Benefits:
14
* It would allow supporting external WiFi dongles such as the ones supported by the ath9k_htc driver and free firmwares without the need for a specific application or configuration.
15 46 Denis 'GNUtoo' Carikli
* It would make devices last longer by alleviating the device specific maintenance burden: If LineageOS stops supporting a Replicant supported device, Replicant would need to maintain it by its own. This would require a lot of work, unless the device is already supported the upstream Linux kernel and generic hardware abstractions layers. This would also enable Replicant to support devices that are not currently supported by LineageOS with a lot less work.
16 11 Denis 'GNUtoo' Carikli
* It would enable the support for devices that are or will be added to upstream Linux.
17 2 Denis 'GNUtoo' Carikli
18 22 Denis 'GNUtoo' Carikli
As GNU/Linux expects standard kernel interfaces, this would also enable to run GNU/Linux out of the box on such devices.
19
This has some interesting outcomes:
20 46 Denis 'GNUtoo' Carikli
* The device specific work could be shared between GNU/Linux communities and Replicant communities. This could result in less work to do to support individual devices. Since Android libraries depends on Android's libc, non-standard proprietary libraries might be harder to reuse than the free software implementations, so we might get even more collaboration thanks to that.
21
* It would enable GNU/Linux distributions to more easily support smartphones and tablets, which would hopefully enable FSDG distributions to be able to focus on usability instead of hardware support. This way, if one day Android devices stop using the Linux kernel, stops being free software, or if the code takes directions that are too much problematic, already having GNU/Linux based Android alternatives would reduce the amount of work needed to be able to get again a fully free software distribution for smartphones and tablets.
22 23 Denis 'GNUtoo' Carikli
* Older devices with less amount of RAM than Replicant current minimum requirements could be used with GNU/Linux and possibly repurposed for other usages, reducing the amount of electronic devices waste.
23 22 Denis 'GNUtoo' Carikli
24 2 Denis 'GNUtoo' Carikli
h2. Requirements
25
26 404 Fil Lupin
* For the other standard interfaces (like ALSA, etc) a device running a upstream Linux Kernel with as few patches as possible is required.
27 2 Denis 'GNUtoo' Carikli
28 4 Denis 'GNUtoo' Carikli
h2. Devices
29
30 5 Denis 'GNUtoo' Carikli
It is best to use a device that requires the least amount of work to be functional under Replicant.
31
More precisely we want to minimize:
32 11 Denis 'GNUtoo' Carikli
* The work needed to have the device usable with upstream Linux.
33 5 Denis 'GNUtoo' Carikli
* The work porting or writing Android hardware abstractions layers.
34
35
To achieve that we can choose a device that:
36
* requires no or very minimal work to be fully supported by Linux.
37
* have less hardware features (so we don't need to support them in Linux and in the HALs).
38
* is easy to buy, so the work can be shared among multiple people.
39 53 Denis 'GNUtoo' Carikli
* doesn't have more freedom flaws than the devices currently supported by Replicant
40 5 Denis 'GNUtoo' Carikli
41 54 Denis 'GNUtoo' Carikli
It is also a good idea to keep one image per device at first, as trying to make a single image that
42 55 Denis 'GNUtoo' Carikli
would work on all ARM device supported by upstream Linux is complicated: Even GNU/Linux
43
distributions have a hard time doing that for ARM devices.
44 6 Denis 'GNUtoo' Carikli
45 58 Denis 'GNUtoo' Carikli
h2. Linux upstream status
46
47 403 Kurtis Hanna
In some cases, even if the upstream status looks good, nonfree bootloaders can get in the way. We have a list of stock bootloaders incompatible with upstream Linux in this page: [[BootloadersIncompatibleWithLinux]].
48 363 Denis 'GNUtoo' Carikli
49 400 Denis 'GNUtoo' Carikli
See "LinuxSupportedDevices":https://redmine.replicant.us/projects/upstreaming/wiki/LinuxSupportedDevices in the upstreaming sub project for the upstream status for various devices.
50 78 Denis 'GNUtoo' Carikli
51 134 Denis 'GNUtoo' Carikli
h1. Bootloaders
52 1 Denis 'GNUtoo' Carikli
53
h2. Bootloader status
54
55 402 Denis 'GNUtoo' Carikli
See the "BootloaderStatus":https://redmine.replicant.us/projects/upstreaming/wiki/BootloaderStatus page on the upstream subproject.
56 121 Denis 'GNUtoo' Carikli
57 1 Denis 'GNUtoo' Carikli
h2. See also
58
59
* [[Google Summer of Code 2018]]
60 12 Denis 'GNUtoo' Carikli
61 379 Denis 'GNUtoo' Carikli
h1. GNU/Linux components
62 19 Denis 'GNUtoo' Carikli
63 182 Denis 'GNUtoo' Carikli
h2. Modem support
64 1 Denis 'GNUtoo' Carikli
65 183 Denis 'GNUtoo' Carikli
|_. Protocols |_. Implmentation |_. comments |
66 190 Denis 'GNUtoo' Carikli
| QMI | Android <-> RIL <-> libqmi-ril to be completed <-> libqmi | |
67 184 Denis 'GNUtoo' Carikli
|/2. * QMI
68 1 Denis 'GNUtoo' Carikli
* AT
69 190 Denis 'GNUtoo' Carikli
* Other | Android <-> RIL <-> libraries to be written | 
70 226 Denis 'GNUtoo' Carikli
| "android_frameworks_opt_telephony_ril_ofono":https://github.com/scintill/android_frameworks_opt_telephony_ril_ofono + ofono + ofono backend (AT, QMI, etc) | * Using ofono would enable us to share more effort with upstream GNU/Linux and support many other protocol like AT for the GTA04 or qmi-ril for the Galaxy SIII 4G (I9305) or the Galaxy Note II 4G (N7105)
71 405 Fil Lupin
* According to the "README":https://github.com/scintill/android_frameworks_opt_telephony_ril_ofono/blob/master/README.md, it has already been tested with most of Replicant 6 code but on a smartphones not yet supported by Replicant. Calls, Audio, SMS, etc are known to work.
72 281 Kurtis Hanna
* "BuildRilWrapper.java":https://github.com/scintill/android_frameworks_opt_telephony_ril_ofono/blob/master/build/java/net/scintill/ril_ofono/BuildRilWrapper.java seems to use introspection to automatically generate the API between the Framework Java RIL and itself (which replaces rild) (See the "official documentation":https://source.android.com/devices/tech/connect/ril for background information on the Android architecture)
73 282 Kurtis Hanna
* Replicant and oFono based Java RIL "video presentation":https://redmine.replicant.us/projects/replicant/wiki/ContributorsMeetingJuly2019#Presentations |
74 198 Denis 'GNUtoo' Carikli
|/5. samsung-ipc | Ofono (rilmodem backend/driver) <-> rild <-> libsamsung-ril <-> libsamsung-ipc | * Might be usable for GNU/Linux distributions with "libhybris":https://en.wikipedia.org/wiki/Hybris_%28software%29
75 1 Denis 'GNUtoo' Carikli
* Could be usable for testing Replicant as ofono could run on the host computer and the rild socket could be exported with adb
76 197 Denis 'GNUtoo' Carikli
* Some forks exist: check if they still have interesting patches
77 281 Kurtis Hanna
* https://github.com/rilmodem/ofono|
78 347 Denis 'GNUtoo' Carikli
| Android <-> rild <-> libsamsung-ril <-> libsamsung-ipc | * Currently in use in Replicant
79
* Well integrated with Android
80
* Potentially usable by other distributions
81
* No known way to support different modems protocols in the same Replicant image with that |
82 189 Denis 'GNUtoo' Carikli
| Android <-> Ofono <-> libsamsung-ipc | * "An ofono fork with libsamsung-ipc support is available":https://github.com/fourkbomb/ofono
83 346 Denis 'GNUtoo' Carikli
"Patches":https://lists.ofono.org/pipermail/ofono/2012-September/013777.html to add that upstream were "refused":https://lists.ofono.org/pipermail/ofono/2012-September/013778.html because upstream didn't want to make the project become GPLv3 (libsamsung-ipc was GPLv3 at the time) but now libsamsung-ipc has been relicensed to GPLv2+
84
* Could be used to have generic a Replicant image supporting many devices with very different modems protocols (like libsamsung-ipc or QMI based ones) and have ofono do the modem detection |
85 185 Denis 'GNUtoo' Carikli
|
86 197 Denis 'GNUtoo' Carikli
| FSO <-> libsamsung-ipc | * Probably not easily usable in Replicant
87 194 Denis 'GNUtoo' Carikli
* Is FSO still actively maintained?
88 193 Denis 'GNUtoo' Carikli
* Was used by SHR and potentially other GNU/Linux distributions supporting the Openmoko GTA04 smartphones |
89 182 Denis 'GNUtoo' Carikli
90
h2. Upstream userspace hardware support libraries
91
92
|_. Usage |_. Replicant |_. GNU/Linux |_. comments |
93
| Bluetooth stack | BlueDroid | Bluez | |
94
| GPS hardware support | ? | gpsd | |
95
96 16 Denis 'GNUtoo' Carikli
97 20 Denis 'GNUtoo' Carikli
h2. Upstream non-hardware specific userspace
98 18 Denis 'GNUtoo' Carikli
99
|_. Usage |_. Replicant |_. GNU/Linux |_. comments |
100 151 Denis 'GNUtoo' Carikli
| Unix command line tools | ? | * Busybox
101
* Coreutils | * Busybox already has Android specific code in it but no Android.mk 
102
* Busybox build is very similar to Linux, and Linux can be built by Android |
103 44 Denis 'GNUtoo' Carikli
104 354 Denis 'GNUtoo' Carikli
h2. MTP
105
106 355 Denis 'GNUtoo' Carikli
TODO: 
107
* look at https://github.com/viveris/uMTP-Responder to see if it can be integrated in Android. It is known to work with the upstream kernel.
108
* Also compare with other implementation, including the Android one.
109 354 Denis 'GNUtoo' Carikli
110 229 Denis 'GNUtoo' Carikli
h2. libc
111
112
|_. Feature |_. Advantages |_. Disadvantages |_. sustainability |
113
| glibc + libhybris | * You just need an Android.mk to compile GNU/Linux software | * You need to link the Android part that need bionic functions to libhybris | TODO: Evaluate how close to bionic is libhybris |
114
| bionic | Android default | * You spend lot of time trying to run GNU/Linux debug tools like evtest on Android:
115
* Parabola cannot be used on old kenrels (FATAL: kernel too old)
116
* GuiX and libreCMC might not have the package and might need tweaking to be recompiled with an old glibc and kernel headers
117
* TODO: try crosstool-ng
118 230 Denis 'GNUtoo' Carikli
* Most of the other GNU/Linux distributions are not FSDG compliant or do not support ARM
119
* The software might not work on Android due to missing bionic functions like versionsort(...) |
120 229 Denis 'GNUtoo' Carikli
121 44 Denis 'GNUtoo' Carikli
h2. Other projects interested in using upstream Linux and/or contributing to it
122
123 339 Kurtis Hanna
h3. PostmarketOS
124
"pmOS wiki: upstream kernel":https://wiki.postmarketos.org/wiki/The_Mainline_Kernel
125
"pmOS wiki: i9305 with upstream kernel":https://wiki.postmarketos.org/wiki/Samsung_Galaxy_SIII_LTE_(samsung-i9305)#Mainline_Kernel
126
127 340 Kurtis Hanna
h3. O-DROID
128
129
h3. osmocomBB
130
131
h3. Mali
132
133
h3. LineageOS
134
135
h3. oFono
136
137
h3. Parabola
138 116 Denis 'GNUtoo' Carikli
139 380 Denis 'GNUtoo' Carikli
h1. GNU/Linux distributions
140 318 Denis 'GNUtoo' Carikli
141 320 Denis 'GNUtoo' Carikli
h2. Halium
142
143 318 Denis 'GNUtoo' Carikli
Some GNU/Linux distributions like Plasma Mobile, LuneOS, Ubuntu Touch use libhybris through the "Halium project":https://halium.org/ to reuse proprietary Android libraries
144 1 Denis 'GNUtoo' Carikli
145 323 Denis 'GNUtoo' Carikli
h2. Mer
146
147 324 Denis 'GNUtoo' Carikli
* Mer uses ofono for handling the modem
148
* For OpenGL it's not clear if they use nonfree drivers. It would be worth looking into it. Their stack seem to be able to use free implementations as well as nonfree implementations.
149 323 Denis 'GNUtoo' Carikli
150
See the "Mer architecture":https://wiki.merproject.org/wiki/Architecture for more details.
151
152 320 Denis 'GNUtoo' Carikli
h2. PostmarketOS
153
154 322 Denis 'GNUtoo' Carikli
"PostmaketOS":https://postmarketos.org/ is probably not using libhybris at all and is instead working with upstream and probably doesn't depend on nonfree libraries
155 320 Denis 'GNUtoo' Carikli
156
h2. Replicant strategies
157
158 381 Denis 'GNUtoo' Carikli
Replicant is currently involved with upstream GNU/Linux, but it would probably be a good idea to collaborate more with  distributions that don't depend on libhybris.
159 318 Denis 'GNUtoo' Carikli
160 378 Denis 'GNUtoo' Carikli
h1. Android distributions
161 1 Denis 'GNUtoo' Carikli
162 426 Denis 'GNUtoo' Carikli
h2. Android x86
163
164
At the time of writing, the most recent images are RC images for Android 9, but there are branches for Android 10.
165
166
As they use (mostly?) upstream kernels, they sometimes have interesting code.
167
168
*Source code*: https://git.osdn.net/view?a=project_list;pf=android-x86
169
*Manifest*: git://git.osdn.net/gitroot/android-x86/manifest.git
170
171
Branches[1]: 
172
173
| Branch | Android version |
174
| q-x86 | 10.0 |
175
| pie-x86 | 9.0 |
176
| oreo-x86 | 8.1 |
177
| nougat-x86 | 7.1 |
178
| marshmallow-x86 | 6.0 |
179
| lollipop-x86 | 5.1 |
180
| kitkat-x86 | 4.4 |
181
| jb-x86 | 4.3 |
182
| ics-x86 | 4.0 |
183
| honeycomb-x86 | 3.2 |
184
| gingerbread-x86 | 2.3 |
185
| froyo-x86 | 2.2 |
186
| eclair-x86 | 2.1 |
187
| donut-x86 | 1.6 |
188
| cupcake-x86 | 1.5 |
189
 
190
fn1. https://www.android-x86.org/source.html
191
192
193
194 141 Denis 'GNUtoo' Carikli
h2. AOSP
195 327 Denis 'GNUtoo' Carikli
196 120 Denis 'GNUtoo' Carikli
AOSP doesn't support many devices, but it seem to support some devboards. 
197 327 Denis 'GNUtoo' Carikli
198 326 Denis 'GNUtoo' Carikli
The advantage is that in general devboards are well supported by upstream kernels.
199 325 Denis 'GNUtoo' Carikli
200
Supported devboards[1]?:
201
| Devboard | Freedom issues | Comments |
202 1 Denis 'GNUtoo' Carikli
| Beagleboard-X15 | No free GPU driver | Well supported by GNU/Linux, free bootloader |
203 326 Denis 'GNUtoo' Carikli
| Cuttlefish emulator | ? | ? |
204 325 Denis 'GNUtoo' Carikli
| Other | ? | ? |
205 328 Denis 'GNUtoo' Carikli
206 1 Denis 'GNUtoo' Carikli
The official documentation also "mentions some devboards":https://source.android.com/setup/build/devices .
207 388 Denis 'GNUtoo' Carikli
208
fn1. Some of the devboards in this page are probably supported: https://wiki.linaro.org/AOSP#AOSP_Dev_Board_Reference_Information
209
210 382 Denis 'GNUtoo' Carikli
h2. CustomROMs
211
212
CustomROMs seem to be a space for unofficial port of LineageOS. The idea is probably to develop the port until they manage to meet LineageOS's "device-support-requirements.md":https://github.com/LineageOS/charter/blob/master/device-support-requirements.md . When the requirements are met, they are probably included in LineageOS directly.
213
214
Interesting ports:
215
* The Galaxy SIII (GT-I9300) is being ported to more recent LineageOS versions. There is "a thread on the collaboration with Replicant":https://github.com/CustomROMs/android_local_manifests_i9300/issues/1 in github. The person/people doing the port seem to alternate between an upstream kernel and a older kernel based on the vendor code depending on the amount of work required to finish the port and/or the difficulties encountered. As we are also using a kernel based on upstream Linux we collaborate on that part by reusing each other work when applicable.
216
217 1 Denis 'GNUtoo' Carikli
h2. DivestOS Mobile
218
219
This distribution is based on LineageOS. While they seem to reuse nonfree software to make the hardware work, they spent some time cleaning up LineageOS code itself.
220
221
For instance it contains patches to remove privacy issues and nonfree software included in CyanogenMod or LineageOS.
222
223
As we need to do that too in Replicant as long as we use LineageOS as base, it would be interesting to collaborate more with DivestOS on that part.
224
225
Web site:
226
*https*: https://divestos.org/
227
*Onion*: http://6sdlxbqgcxdbkvysoir2qvqqs5ro3fxgyl3phvuphcdyklv7rg57jhid.onion
228
229
h2. Fairphone
230
231
As October 2020, they are porting the Fairphone 2 to Android 9. However to do that, they are using 3.4 kernel and not any upstream kernels.
232
233
In addition, they don't seem very interested in free software bootloaders, and the Fairphone 1 and 2 use Qualcomm System On a Chip.
234
235
However they are probably interested in free software libraries to make the port to newer Android versions easier.
236
237 426 Denis 'GNUtoo' Carikli
h2. LineageOS
238 1 Denis 'GNUtoo' Carikli
239 426 Denis 'GNUtoo' Carikli
See "device-support-requirements.md":https://github.com/LineageOS/charter/blob/master/device-support-requirements.md for more information on LineageOS expectations.
240 382 Denis 'GNUtoo' Carikli
241 426 Denis 'GNUtoo' Carikli
Replicant has "a script":https://git.replicant.us/replicant/vendor_replicant-scripts/tree/research that is able to parse the "LineageOS wiki data":https://github.com/LineageOS/lineage_wiki . That can be useful to find information on devices supported by LineageOS.
242 382 Denis 'GNUtoo' Carikli
243 426 Denis 'GNUtoo' Carikli
The "devices supported by LineageOS 16":https://wiki.lineageos.org/devices/ have either:
244
* A Qualcomm SOC with an integrated modem inside (MSM*) for many devices
245
* A Qualcomm SOC without a modem inside (APQ*) for many devices
246
* A HiSilicon Kirin 970 SOCs for devices like:
247
** The "Huawei Honor View 10":https://wiki.lineageos.org/devices/berkeley
248
** The "Huawei P20 Pro":https://wiki.lineageos.org/devices/charlotte
249
* A Samsung Exynos 7580 SOC for the following device
250
** "Galaxy S5 Neo":https://wiki.lineageos.org/devices/s5neolte (Smartphone): It has shared memory between the modem and the SOC
251 200 Denis 'GNUtoo' Carikli
252 426 Denis 'GNUtoo' Carikli
It may be because they rely on nonfree software to support devices, which has not been ported to Android 9, or may be because they need more time to add devices with other SOCs like exynos.
253 200 Denis 'GNUtoo' Carikli
254
h2. Waydroid
255
256
Waydroid consist in some host tool that can containerize an Android distribution, and some changes on top of LineageOS.
257
258
Some repositories would only be useful if we decide to integrate Waydroid in Replicant to have some FSDG compliant way to run Android applications on top of GNU/Linux:
259
* The audio library does something like that: @snd_pcm_open(&out->pcm, "pulse", SND_PCM_STREAM_PLAYBACK, 0);@ [1], so if I understood right, it uses Pulseaudio's alsa compatbility layer.
260
* For the graphics, some repositories like mesa, minigbm are replaced by Waydroid's own repositories. It also integrates boringdroid APK as-is instead of building it from source. Boringdroid brings moving windows to Android instead of the default full-screen windows.
261 141 Denis 'GNUtoo' Carikli
262
There is some interest in Guix about having something like that as a "patch serie":https://issues.guix.gnu.org/51737#22 was sent for adding the Waydroid host part in Guix.
263 407 Fil Lupin
264 155 Denis 'GNUtoo' Carikli
What would be more interesting for Replicant as-is that in android_hardware_waydroid[2], there is libraries that work with upstream kernels like the vibrator library. We also have our own vibrator library but it would probably be a good idea to share the maintenance somehow.
265 425 Denis 'GNUtoo' Carikli
266
fn1. https://github.com/waydroid/android_hardware_waydroid/blob/lineage-18.1/audio/audio_hw.c
267
268
fn2. https://github.com/waydroid/android_hardware_waydroid
269
270
h2. Building a collaboration with other Android distributions
271
272
Given that:
273
* Replicant doesn't want to support devices that have more freedom issues than the ones currently supported.
274
* Many other Android distributions probably don't have the same goals with the freedom of the devices they support.
275
* Replicant 9 is based on upstream Linux and will have to maintain its userspace libraries.
276
* Some users may still want to support devices that have more freedom issues than the ones supported by Replicant.
277
278
It could be a good idea to share the maintenance of the code used to make Replicant 9 with other distributions.
279 426 Denis 'GNUtoo' Carikli
280
h1. Comparison of distributions
281
282
h2. AOSP and LineageOS
283
284
| Feature | AOSP | LineageOS |
285
| Code quality | Better than LineageOS | |
286
| Documentation | Better than LineageOS | |
287
| root | Not sure if supported or not | Supported |
288
| Minor release versioning | supported with Git tags | Not supported.
289
For instance frameworks/native has no LineageOS tags (only cm-1x tags) and has no other branch for lineage OS 16.0 than the lineage-16.0 branch, as the other branches name are for other things. This was confirmed after running 'git fetch github' in frameworks/native to fetch the other branches that are not fetched by repo by default.
290
Despite that, some code was even merged in after the lineage-16.0 release:
291
<pre>
292
commit 22abc3cf4077644463a2dc1c59a5a74e9518ea16
293
Merge: 9e96d54 8a6b6c3
294
Date:   Sat Jul 13 18:57:45 2019 +0200
295
296
    Merge remote-tracking branch 'aosp/pie-gsi' into lineage-16.0-pie-gsi
297
</pre> |
298
| GUI features for developers
299
* Advanced reboot | ? | Supported |
300
| Integrated kernel builds | Unsupported | Supported |
301
302 1 Denis 'GNUtoo' Carikli
303
h2. Design decisions
304 210 Denis 'GNUtoo' Carikli
305 377 Denis 'GNUtoo' Carikli
Some decisions have been taken by upstream projects, for instance the the Android Open Source Project (AOSP) is pushing device manufacturers to use "signed bootloaders":https://source.android.com/security/verifiedboot/device-state#root-of-trust and not give the users the ability to replace those bootloaders. Therefor it is best to revisit such decisions and decide whether or not to implement a given feature.
306
307
h3. Various
308
309 210 Denis 'GNUtoo' Carikli
| Feature | Advantages | Disadvantages |
310
| adb and root at boot | Easier to debug:
311
* We get the logs at boot
312
* May be able to diagnose non-booting devices (partition not mountable, etc) | Way less secure:
313
* Vulnerable to "Juice_Jacking":https://en.wikipedia.org/wiki/
314
* Vulnerable to an attacker that just connect an usb cable to a running phone
315
* Breaks the user's expectation of security (lock screen etc) |
316
317
We can get both: we can enable users to get logs at boot while avoiding any security issues. 
318 160 Denis 'GNUtoo' Carikli
319
To do that we can keep disable adb and root disabled at boot, and enable users to add it back by editing the boot.img or recovery images. We have a tutorial for that in the [[AddingADBRootToAnImage]] page and we are working on script to automate it even more.
320
321 209 Denis 'GNUtoo' Carikli
h3. root filesystem related
322
323 1 Denis 'GNUtoo' Carikli
|_. Feature |_. Advantages |_. Disadvantages |_. sustainability |
324 161 Denis 'GNUtoo' Carikli
| System as root | * The kernel size can be bigger
325 213 Denis 'GNUtoo' Carikli
* You have to hardcode the root partition in the cmdline or use PARTLABEL which might be a security issue: if a microSD has a partition named SYSTEM, the kernel may boot on it instead | having an initramfs adds some flexibility:
326
* Selecting partitions can potentially be more  flexible | |
327 164 Denis 'GNUtoo' Carikli
| System as root + dm-verity + "dm-init":https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/device-mapper/dm-init.txt | * The kernel size can be bigger
328 294 Kurtis Hanna
* The partition selection is flexible and secure  | | |
329 215 Denis 'GNUtoo' Carikli
| read-only /system | * more secure and more easily understandable by users and developers | * need to ship in replicant user-scripts or add them to vendor/ | |
330 408 Fil Lupin
331 1 Denis 'GNUtoo' Carikli
h3. Gatekeeper HAL backend
332 294 Kurtis Hanna
333 214 Denis 'GNUtoo' Carikli
*Background information*: Gatekeeper is a daemon that is used to store passwords and other secrets.
334 294 Kurtis Hanna
335 165 Denis 'GNUtoo' Carikli
| Backend used | Advantages | Disadvantages |
336 160 Denis 'GNUtoo' Carikli
| simple userspace implementation | * Fast to do
337
* Simple to understand 
338
* Good enough for most use cases| |
339 203 Denis 'GNUtoo' Carikli
| kernel keyring (man 7 keyrings) | * Secure
340
* The Linux kernel is well known and updated regularly
341
* Some users are already used to the userspace/kernel security model
342 219 Denis 'GNUtoo' Carikli
* Probably fun to implement, can learn how to implement Android daemons and how to use the keyring along the way |
343 207 Denis 'GNUtoo' Carikli
| Free software Trusted Execution Environment (TEE) | * Android does it | * Require access to TrustZone, which doesn't work for all SOCs
344 203 Denis 'GNUtoo' Carikli
* Unfamiliar to users and developers (it's supposed to tick in suspend, knowledge about TrustZone is less spread than Linux, etc)
345 205 Denis 'GNUtoo' Carikli
* Probably requires to port a TrustZone OS to every SOC or phone 
346 204 Denis 'GNUtoo' Carikli
* The Linux kernel is well known and updated regularly |
347
| Proprietary software Trusted Execution Environment (TEE) | None: we really want to get rid of it if possible | 
348
Cannot be trusted:
349
* Not free software
350
* Not under the user control |
351 294 Kurtis Hanna
352
h3. Handling dynamic major/minor /dev/ nodes
353 1 Denis 'GNUtoo' Carikli
354 219 Denis 'GNUtoo' Carikli
*Background information*: We can manage to avoid this use case for now.
355
356
| Backend used | Advantages | Disadvantages | sustainability |
357
| Android default + Upstream Linux | | * does not work by default, probably impossible to make it work as-is |
358
| Android default + Upstream Linux + very dirty userspace scripts | * Minimal changes | * Not robust
359
* Might eat up resources
360 220 Denis 'GNUtoo' Carikli
* Already implemented cleanly in mdev | |
361 305 dl lud
| Android default + hacked drivers to use fixed major/minor | * Minimal changes in Linux
362 296 Denis 'GNUtoo' Carikli
* No changes required on Android side | * Require to change userspace software (libsamsung-ipc) | * Not upstreamable in Linux |
363 299 dl lud
| devtmpfs + hacked Android init | * Minimal changes if upstreamed
364 1 Denis 'GNUtoo' Carikli
* Init is hard to debug | * Complex to do as debugging at this stage is complicated | * Need to be upstreamed in Android |
365
| Stock Andrdroid init + mdev (busybox) | * Bad integration in the Android build system | * Changes are minimal | * Android build system integration need to be upstreamed or maintained |
366 305 dl lud
367 1 Denis 'GNUtoo' Carikli
h3. Firmware loading
368 305 dl lud
369
| Backend used | Advantages | Disadvantages | sustainability |
370 299 dl lud
| system/core/init/firmware_handler.cpp | * Stock Android implementation | None | Already upstream in Android |
371
| Something else | None | The stock Android implementation is good enough and firmware loading is trivial anyway | Not upstream in Android |
372
373 300 dl lud
h3. Embeddable web engine
374 299 dl lud
375 304 Denis 'GNUtoo' Carikli
The Android API for embedding a web engine is WebView.
376 296 Denis 'GNUtoo' Carikli
377
| Project | Comments |
378 312 Denis 'GNUtoo' Carikli
| "AOSP WebView API implemented with Chromium":https://developer.android.com/reference/android/webkit/WebView | * Built from Chromium compiled for WebView
379 296 Denis 'GNUtoo' Carikli
* Latest additions to the API seem more and more tied to Chromium (e.g. getWebViewRenderProcess, getWebChromeClient) | 
380 313 Denis 'GNUtoo' Carikli
| Old AOSP WebView API implemented with WebKit | * Not used anymore, since Android 4.4
381
* Does not implement the current WebView API |
382
| "GeckoView":https://mozilla.github.io/geckoview/ | * Not the same API as WebView 
383
* Could be used to implement WebView
384
* Would need to be modified to expose more features from Gecko (e.g. zoom) while others are straightforward |
385
| "Qt WebEngine":https://doc.qt.io/qt-5/qtwebengine-index.html | * Not the same API (C++ instead of Java)
386 314 Denis 'GNUtoo' Carikli
* Probably the smallest subset of Chromium available |
387
| "Wine Internet Explorer implementation":https://wiki.winehq.org/Gecko | * Uses Gecko under the hood
388
* Might be interesting to look at how they did it |
389 313 Denis 'GNUtoo' Carikli
390 298 Denis 'GNUtoo' Carikli
h1. Web engine backend
391 296 Denis 'GNUtoo' Carikli
392 315 Denis 'GNUtoo' Carikli
We have an issue with webview (bug #1780):
393 1 Denis 'GNUtoo' Carikli
* Using a recent webview based on chromium would create freedom issues as we don't know the license of chromium
394 315 Denis 'GNUtoo' Carikli
* Using and old webview based on webkit would bring back many security issues
395
396 1 Denis 'GNUtoo' Carikli
To solve that we need to find a solution that depends on a good upstream as we are not going to write a web browser engine ourselves.
397 315 Denis 'GNUtoo' Carikli
398
h2. Upstream web browser engine comparison
399
400
This lists upstream projects that are not forks tracking another upstream project.
401 220 Denis 'GNUtoo' Carikli
402 317 Denis 'GNUtoo' Carikli
| Project | Comments |
403
| Gecko | * Clear licensing
404
* Friendly upstream: The tor-browser project works with Mozilla to upstream privacy features in Firefox. So we could probably work with them as well too. |
405
| Chromium | * Unclear licensing 
406 307 Denis 'GNUtoo' Carikli
* Google has goals for Chromium that are directly opposed to our goals (tracking, linked to google)
407
* Probably unfriendly upstream because of the opposed goals |
408
| Webkit | ? |
409
410
h2. Forked web browser engine comparison
411
412
TODO: Add various chromium versions here.
413
414 309 Denis 'GNUtoo' Carikli
h2. How and if to implement a webview compatible API
415 1 Denis 'GNUtoo' Carikli
416 310 Denis 'GNUtoo' Carikli
TODO
417 308 Denis 'GNUtoo' Carikli
418 309 Denis 'GNUtoo' Carikli
h1. Tools and build systems
419 396 Denis 'GNUtoo' Carikli
420 395 Denis 'GNUtoo' Carikli
Replicant has an issue with licensing (bug #1973) where we don't know under which license is Replicant. This due to the fact that the Android build system doesn't use a package manager during the build, and so it doesn't have license definition for each repositories.
421 398 Denis 'GNUtoo' Carikli
422 395 Denis 'GNUtoo' Carikli
A good way to fix that and also gain the ability to natively build GNU/Linux components like MESA or ofono would be to use a build system that use a package during at least during the build.
423
424 397 Denis 'GNUtoo' Carikli
Some other communities have issues that do or could also benefit from that:
425 395 Denis 'GNUtoo' Carikli
* GNU/Linux distributions need to package Android tools which are built with the custom Android build system
426 392 Denis 'GNUtoo' Carikli
* Some distributions mixes GNU/Linux and Android
427 395 Denis 'GNUtoo' Carikli
428
h2. Projects
429
430
|_. Project |_. use case |_. Comments |
431
| Android | - Build images
432
- Build the Android NDK and SDK
433 410 Denis 'GNUtoo' Carikli
- Build the Android tools | - Wrapping build systems (like autotools, cmake, etc) is way too primitive:
434 1 Denis 'GNUtoo' Carikli
-- In LineageOS (not AOSP) The kernel is wrapped with .mk files, but the downside is that it runs make inside Linux source each time it needs to compile something
435 410 Denis 'GNUtoo' Carikli
-- In AOSP there is no infrastructure for building software with other build systems, still mesa is built in it, but not the kernel |
436
| Archlinux | - Build and package Android tools(Fastboot, adb, etc) | - relies on a "fragile script":https://git.archlinux.org/svntogit/community.git/tree/android-tools/trunk/generate_build.rb
437 412 Denis 'GNUtoo' Carikli
- The package for Android tools is self contained and doesn't have its dependencies (like liblog, libcutils, etc) splited in other packages | 
438 309 Denis 'GNUtoo' Carikli
| Debian | | relies on "custom Makefiles":https://salsa.debian.org/android-tools-team/android-tools/tree/master/debian/makefiles |
439 316 Denis 'GNUtoo' Carikli
| [[GuixBuildSystem|Guix]] | - Build android tools 
440 1 Denis 'GNUtoo' Carikli
                             - Build the android ndk | Findings:
441 413 Denis 'GNUtoo' Carikli
                                                       - Guix uses "android-make-stub":https://github.com/daym/android-make-stub.git to wrap Android.mk 
442 417 Denis 'GNUtoo' Carikli
                                                       - We have real packaging of dependencies, however not all dependencies are exported, most are though
443
                                                       - The Android build system is wrapper in a ndk-android-build-system function
444 420 Denis 'GNUtoo' Carikli
                                                       - The package definition needs very light and straigtforward patching. See [[GuixBuildSystem|Guix]] for more details. |
445
| "Robotnix":https://github.com/danielfullmer/robotnix |  - Build AOSP images with Nix with package definitions | This project is being funded by NLnet.
446
                                                                                                                              Once completed it has the potential to replace the Android build system.
447 421 Denis 'GNUtoo' Carikli
                                                                                                                              Since it uses package definitions it could fix many issues we have in Replicant but we will need to understand how much maintenance from our side it would need (probably not a lot)
448
Findings:
449 417 Denis 'GNUtoo' Carikli
- It depends on NixOS: @inherit (inputs) nixpkgs nixpkgsUnstable androidPkgs;@ (from "pkgs/default.nix":https://github.com/danielfullmer/robotnix/blob/master/pkgs/default.nix). => We need to also look at how much work it would be to cleanup the nixOS dependencies (if we just have a toolchain we might just need to replace linux-headers by linux-libre-headers and remove what is not used). Alternatively it might be possible to reuse NixOS packages definition and create guix packages from them through guix import. |
450 421 Denis 'GNUtoo' Carikli
| "The GNU/Linux distribution of quectel-modems":https://osmocom.org/projects/quectel-modems | Mix an Android kernel with GNU/Linux userspace | |
451 423 Denis 'GNUtoo' Carikli
| "AsteroidOS":https://github.com/AsteroidOS/asteroid/blob/master/prepare-build.sh#L68 | Mix an Android kernel with GNU/Linux userspace | |
452
| "openembedded-android":https://github.com/anguslees/openembedded-android | Build the Android NDK? | strongly outdated version of openembedded |
453
454
h2. Approaches
455
456 422 Denis 'GNUtoo' Carikli
| Keep the Android build system | + Reduced maintenance cost
457
                                  - Hard to integrate software with other build systems (linux, mesa) 
458
                                  - Hard to audit the licenses                                        |
459
| Package everything in Guix    | + Fixes the licensing situation
460
                                  + Fixes prebuilt situation
461
                                  /!\ Replicant is dead if we can't maintain all the packages
462 1 Denis 'GNUtoo' Carikli
                                  /!\ Replicant is dead if we depend on non-bootstrapable software    |
463 424 Denis 'GNUtoo' Carikli
| Wrap Android build system to 
464
  enable other build systems 
465
  like autotools                | - Cannot use native Android build commands (they are wrapped)       
466
                                  + Can use more build systems
467 417 Denis 'GNUtoo' Carikli
                                  ? Unknown if solves the licensing issue                             |
468 413 Denis 'GNUtoo' Carikli
| Make guix produce tarball
469
  packages with Android.bp to 
470 414 Denis 'GNUtoo' Carikli
  import the prebuild and 
471 1 Denis 'GNUtoo' Carikli
  extract it in Android build 
472 414 Denis 'GNUtoo' Carikli
  system                        | + Integrated well enough in Android
473 416 Denis 'GNUtoo' Carikli
                                  + Fixes the licensing situation
474 415 Denis 'GNUtoo' Carikli
                                  + Incremental steps that can be reverted more easily 
475 414 Denis 'GNUtoo' Carikli
                                    than packaging everything in Guix
476
                                  /!\ We need to make sure to only depend on things that are buildable
477
                                      with AOSP build system if we want to be able to revert to that 
478
                                      build system                                                     |
479 413 Denis 'GNUtoo' Carikli
480
h1. Coding standards and style:
481
482
| Language | Stadards             | Used in                  | Tools                                                            | Comments                       |
483
| C        | Kernel coding style  | * Linux kernel
484
                                    * libsamsung-ipc         | * Has scripts/checkpatch.pl to check that can easily be imported |                                |
485
| C        | curl[3]              | * curl                   | * Has scripts/checksrc.pl in (lib)curl source code               |                                |
486
| C        | GNU coding style     | GNU projects (GRUB, etc) | ?                                                                |                                |
487 416 Denis 'GNUtoo' Carikli
| C        | pep7[1]              | * Python C code          | ?                                                                |                                |
488 1 Denis 'GNUtoo' Carikli
| C        | sysexits.h           | * libsamsung-ipc tools   | ?                                                                | used to standardize exit codes |
489
| Guile    | ?                    | * Guix                   | * Has guix style (and guix lint)                                 |                                |
490
491
492
Having a code style is good because: 
493
* Having inconsistent style makes it harder to read the code, spot bugs, etc
494
* Fixing inconsistent style too late results in commits that are extremely hard to review[2].
495
* Fixing inconsistent style in unrelated commits makes rebasing code painful
496
497
fn1. https://peps.python.org/pep-0007/
498
fn2. Example: https://git.replicant.us/replicant/hardware_replicant_libsamsung-ipc/commit/?id=3f706fe2556b5efe29aa16a1232a3dc5d5646f55
499
fn3. https://curl.se/dev/code-style.html