Project

General

Profile

Actions

Upstream » History » Revision 368

« Previous | Revision 368/434 (diff) | Next »
Denis 'GNUtoo' Carikli, 07/27/2020 04:36 PM
Add current Guix infos


Upstream Linux

Tracking upstream patches

We have a new issue tracker for tracking upstream status of various patches.

Benefits of using Upstream Linux

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

Benefits:
  • 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.
  • 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.
  • It would enable the support for devices that are or will be added to upstream Linux.
As GNU/Linux expects standard kernel interfaces, this would also enable to run GNU/Linux out of the box on such devices.
This has some interesting outcomes:
  • 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.
  • 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.
  • 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.

Requirements

  • For the other standard interfaces (like ASLA, etc) a device running a upstream Linux Kenrel with as few patches as possible is required.

Devices

It is best to use a device that requires the least amount of work to be functional under Replicant.
More precisely we want to minimize:
  • The work needed to have the device usable with upstream Linux.
  • The work porting or writing Android hardware abstractions layers.
To achieve that we can choose a device that:
  • requires no or very minimal work to be fully supported by Linux.
  • have less hardware features (so we don't need to support them in Linux and in the HALs).
  • is easy to buy, so the work can be shared among multiple people.
  • doesn't have more freedom flaws than the devices currently supported by Replicant

It is also a good idea to keep one image per device at first, as trying to make a single image that
would work on all ARM device supported by upstream Linux is complicated: Even GNU/Linux
distributions have a hard time doing that for ARM devices.

Linux upstream status

In some cases, even if the upstream status looks good, nonfree bootlaoders can get in the way. We have a list of stock bootloaders incompatible with upstream Linux in this page: BootloadersIncompatibleWithLinux.

Smartphones and tablets with a free software bootloader and work in progress upstream Linux support

Formfactor Vendor Product Linux dts Linux status Verdict
Smartphone LG Optimus Black omap3-sniper.dts no display(no driver), very few peripherals Too much work required
Tablet Amazon Kindle Fire (first generation) omap4-kc1.dts no display(no driver), very few peripherals Too much work required
Smartphone GTA04 A3 omap3-gta04a3.dts http://projects.goldelico.com/p/gta04-kernel/page/UpstreamStatus/ Good fit: Free software bootloader, very few parts not upstream
Smartphone GTA04 A4 omap3-gta04a4.dts
Smartphone GTA04 A5 omap3-gta04a5.dts

Replicant supported Samsung Exynos devices

Formfactor Vendor Product Linux dts Linux status page Issues Verdict
Smartphone Samsung Galaxy S (i9000) s5pv210-galaxys.dts https://github.com/PabloPL/linux/wiki (needs verified, but looks right) * Probably has a signed bootloader. See the bootloader status below for more information on it.
* Has shared memory between the modem and the processor running Replicant
* Is supported by Replicant 4.2 but not Replicant 6.0
* Barely meets Android 9 requirements
Smartphone Samsung Galaxy S II (i9100) exynos4210-i9100.dts patch was submitted upstream on March 12, 2020 * See the Samsung_Galaxy_SII_(samsung-i9100) page on the PostmarketOS wiki for more details.
* This work was based on a 4.20 downstream kernel
* JustChrono is regenerating some history / splitting the 4.2 port into smaller parts since there is not much history in the other repo
* yurnam also has some recent commits
* Probably has a signed bootloader
* Attempts were made to get Samsung IPC modem support via oFono from this patchset but it was not accepted and does not build
* postmarketOS is seeking help to support the modem
Smartphone Samsung Galaxy S III (i9300) exynos4412-i9300.dts https://blog.forkwhiletrue.me/pages/midas-mainline/ + patch required for Samsung bootloader (reference) The first stage is signed. See the bootloader status below for more information on it. Good fit: Only the modem, touch keys, and small parts are missing upstream but are available as patches on top of it
Smartphone Samsung Galaxy Note 2 3G (N7100) exynos4412-n710x.dts (needs to be modified to exynos4412-n7100.dts via this patch.) Good fit: the LCD, the modem, touch keys, and small parts are missing but are available as patches on top of it
Tablet Samsung Galaxy Note 8.0 (N51XX) The platform is kona, not midas, but it might be fairly easy to port to mainline since it uses the same SoC, same fuelgauge, same audio, same radio chip, and maybe other parts apart from LCD and touchscreen as the i9300 and n7100 * The bootloader is most probably signed. See the bootloader status below for more information on it.
* Soldered battery => Shops might be able to replace it
* Need to find a way to get access to the serial port => The special connector might have serial on it

Replicant supported Texas Instruments OMAP4 devices

Formfactor Vendor Product Linux dts Linux status page Issues Verdict
Smartphone Samsung Galaxy Nexus (I9250) None * Status on PostmarketOS wiki
* mainline fork
? Need to write a DTS
Tablet Samsung Galaxy Tab 2 7.0 (P31xx) None ? * Soldered battery => Shops might be able to replace it
* Need to find a way to get access to the serial port => The special connector might have serial on it
?
Tablet Samsung Galaxy Tab 2 10.1 (P51xx)

Other devices with some upstream support.

Formfactor Vendor Product Linux dts Linux status page Issues Verdict
Tablet Difrnce DIT4350 sun5i-a13-difrnce-dit4350.dts
Tablet Empire Electronix D709 tablet sun5i-a13-empire-electronix-d709.dts
Tablet Empire Electronix M712 tablet sun5i-a13-empire-electronix-m712.dts
Tablet Gemei G9 Tablet sun4i-a10-gemei-g9.dts TODO in the dts Missing touchscreen
Smartphone Samsung Galaxy SIII 4G (i9305) exynos4412-i9305.dts https://blog.forkwhiletrue.me/pages/midas-mainline/ + patch required for Samsung bootloader The bootloader is signed. See the bootloader status below for more information on it. Good fit:
* Not fully supported by Replicant because it lacks modem support but the work can be reused by the Galaxy SIII, Galaxy SII, Note 2, Note 8.0, and Note 10.1 (2012 edition).
* touch keys, and small parts are missing upstream but are available as patches on top of it.
Smartphone Samsung Galaxy Note 2 4G (N7105) exynos4412-n710x.dts needs to be modified to exynos4412-n7105.dts via this patch since it has a different modem than the n7100. Good fit: the LCD, touch keys, and small parts are missing but are available as patches on top of it. The modem might be in mainline, but probably lacks firmware loading.
Tablet Samsung Galaxy Note 10.1 (2012 edition) exynos4412-n8000.dts (downstream dts with a lot of upstream components) A developer, Viciouss, is working on porting Replicant 9 to this device.
Smartphone Nokia N900 omap3-n900.dts https://elinux.org/N900 * Has a signed bootloader
* Has only 256M of RAM
Bad fit: not enough RAM
Smartphone Nokia N9 omap3-n9.dts https://elinux.org/N9 * Probably have a signed bootloader
* Needs investigation to see if the touchscreen firmware is mandatory
Would need investigation to see if the touchscreen firmware is mandatory
Smartphone Nokia N950 omap3-n950.dts https://elinux.org/N950
Smartphone Motorolla Droid 4 (XT894) omap4-droid4-xt894.dts http://elektranox.org/droid4/ Probably has a signed bootloader, may have a signed kernel requiring kexec Bad fit: requires a signed Linux kernel in the boot chain
Smartphone Nexus 7 (2012) qcom-apq8064-asus-nexus7-flo.dts Qualcomm SOC (signed bootloader, unknown modem isolation) Bad fit:
* Would need more guarantees requarding the modem isolation on recent qualcomm SOCs
* Would need more research to on the state of free software for more recent qualcom SOCs
* Not enough support in the Linux kernel for devices with Qualcomm SOCs
qcom-apq8064-sony-xperia-yuga.dts
qcom-msm8974-sony-xperia-amami.dts
Tablet Sony Xperia Z2 Tablet qcom-msm8974-sony-xperia-castor.dts
qcom-msm8974-sony-xperia-honami.dts
Smartphone Nexus 5 qcom-msm8974-lge-nexus5-hammerhead.dts
Smartphone Samsung Galaxy S5 qcom-msm8974-samsung-klte.dts
Fairphone 2 qcom-msm8974-fairphone-fp2.dts
Tablet MSI Primo81 sun6i-a31s-primo81.dts
Tablet Yones TopTech BS1078 v2 Tablet sun6i-a31s-yones-toptech-bs1078-v2.dts
Tablet Allwinner? Q8 A13 Tablet sun5i-a13-q8-tablet.dts
Tablet Utoo P66 sun5i-a13-utoo-p66.dts
Tablet Primux INet-98V Rev 02 sun5i-a13-inet-98v-rev2.dts
Tablet Primux INet-86DZ Rev 01 sun8i-a23-inet86dz.dts
Tablet Wondermedia? WM8650-MID Tablet wm8650-mid.dts
Tablet Wondermedia? WM8850-W70v2 Tablet wm8850-w70v2.dts
Tablet Colorfly E708 Q1 tablet sun6i-a31s-colorfly-e708-q1.dts
Tablet Polaroid MID2407PXE03 tablet sun8i-a23-polaroid-mid2407pxe03.dts
Tablet Polaroid MID2809PXE04 tablet sun8i-a23-polaroid-mid2809pxe04.dts
Tablet Allwinner? Q8 A23 Tablet sun8i-a23-q8-tablet.dts
Tablet Allwinner? Q8 A33 Tablet sun8i-a33-q8-tablet.dts
Tablet TBS Biometrics A711 Tablet sun8i-a83t-tbs-a711.dts
Tablet iNet Tek iNet Q972 tablet sun6i-a31s-inet-q972.dts
Tablet Allwinner? GT90H Dual Core Tablet (v4) sun8i-a23-gt90h-v4.dts
Tablet Allwinner? GA10H Quad Core Tablet (v1.1) sun8i-a33-ga10h-v1.1.dts
Tablet Allwinner? INet-D978 Rev 02 sun8i-a33-inet-d978-rev2.dts

More upcoming Exynos related mainlining work could potentially be discovered at this Tizen wiki page

Allwinner devices

Devices with Allwinner SOCs are an interesting targets because:
  • Many of them do not use signed bootloaders.
  • Many of the SOCs and various devices using them have good Linux and u-boot mainline support

For instance the Lime 2 from Olimex is pretty well supported and is easy to find.
However this device is a single board computer and, as such it doesn't have the have the usual peripherals that are commonly found in tablets and smartphones. This makes a port on this device less relevant and less useful.

Some research is needed to identify which devices are easiest to work with. Tablets that don't have a modem seem to be better than smartphones, as supporting the modem would require to have it supported in Linux and the userspace libraries. This might even require to write and upstream a Linux driver for the modem.

A good tablet for this task should have:
  • A SOC that has good mainline support, see the Linux mainlining effort page on linux-sunxi for more details.
  • A Free software bootloader, or the ability to easily add support for the tablet to a free software bootloader.
  • The ability to power and use an USB WiFi card or chip that is compatible with the ath9k_htc driver.

It would also be better if the chosen tablet doesn't use an AllWinner SOC with a PowerVR GPU, as MALI GPU have more probability to be usable with free software in the future.

Rockchip devices

Formfactor Vendor Product Linux dts Linux status page Issues Verdict
Tablet Acer Chromebook Tab 10 D651N-K9WT - codenamed Scarlet (earliest EOL is Aug 2023) rk3399-gru-scarlet.dtsi The Asus Chromebook Flip C101PA (codenamed Bob) has the same RK3399 SoC and was recently added to mainline u-boot. RK3399 in upstream u-boot doesn't include these tablets yet. These tablets, like the C101PA, ship with Coreboot bootloaders. Google used the Depthcharge payload in Coreboot to boot Android on the Pixel C, which has a different SoC, but also shipped with Coreboot. Upstream Coreboot repo Android specific code in Depthcharge payload u-boot README.rockchip u-boot README.rockusb rkdevelopmenttool First (and only?) XDA thread about porting AOSP/CyanogenMod to a Chromebook These devices have ARM Trusted Firmeware support
Tablet Asus Chromebook Tablet CT100 - codenamed Dumo rk3399-gru-scarlet.dtsi (needs to be verified, but both device's Board Names and Base Boards are codenamed Scarlet)
Tablet CTL Chromebook Tab Tx1 - codenamed Druwl

Bootloaders

Bootloader status

Formfactor Vendor Product signatures Source code u-boot status Verdict
Smartphone Samsung Galaxy S - i9000 The bootloader is probably signed downstream u-boot * u-boot mainline was placed in BL2, copying much of the bootloader work done on the i9300 and n7100
* That u-boot also supports being installed in place of the Linux kernel, leaving the stock bootloader in place
* Probably signed
* The port to run instead of the Linux kernel seem interesting as it could be used on "midas" to disable the MMU and caches
Galaxy S 2 - I9100 Signed, see emulating-exynos-4210-bootrom-in-qemu.html downstream u-boot:
* Sekilsgs2/i9100-uboot
* Talustus/i9100-uboot
* onny/i9100-uboot
* TALUAtGitHub/i9100-uboot
* uboot-bootloader-true-multiboot-t1680898
upstream u-boot for devices with same SoC: origen smdkv310 s5pc210 trats
* xda post about i9100-uboot
* How do the downstream u-boot boot (After BL1? As kernel?)
* Are there other u-boots? (look on common git hosting providers)
?
Galaxy SIII - I9300 * The first stage is signed.
* The stock first stage checks the second stage signatures.
* A signed first stage that doesn't enforce subsequent signatures exists but it's nonfree and non-redistributable
downstream u-boot for the second stage. This was submitted upstream but it broke the Odroid U3, so the code was probably not merged because of that.
* TODO: Make sure it works on the Odroid U3 and resubmit upstream
* That u-boot version is meant to be used in combination with a nonfree and non-redistributable first stage bootloader.
* This combination doesn't load the nonfree TrustZone OS
* Replicant 9 can run on devices with this bootloader, but the current Replicant 6 kernel expects a TrustZone OS to work.
* We need to find a way to completely replace the first bootloader stage (BL1) as the one that is used to run u-boot is nonfree and non-redistributable.
* More details on that issue can be found in the Exynos4_Bootrom wiki page.
Galaxy SIII 4G - I9305
Galaxy Note 2 - N7100
Galaxy Note 2 4G - N7105
Tablet Samsung Galaxy Note 8.0 - N51XX ? Has the same System On a Chip (SOC) as the Galaxy SIII and Note 2, the Exynos4412, but slightly modified u-boot might need to be written. Testing needed.
Galaxy Note 10.1 - N8000 SD Card Boot Touch Point
Camera Samsung Galaxy Camera 2 - EK-GC200 ? First Exynos4412 Samsung device to get u-boot support in 2012
Smartphone Google and Samsung Galaxy Nexus - I9250 downstream u-boot for the second stage
Smartphone LG Optimus Black unsigned upstream u-boot no display(no driver), very few peripherals but enough to be usable
Tablet Amazon Kindle Fire (first generation) upstream u-boot
Smartphone GTA04 A3 downstream u-boot and xloader
GTA04 A4
GTA04 A5
Smartphone Nokia N900 The bootloader is signed Upstream u-boot * Xloader which is the first stage bootloader is signed and loads a nonfree second stage bootloader which is called NOLO. * The upstream u-boot is to be installed in the kenrel partition and runs instead of Linux. A similar implementation could also be used on midas to disable caches and the MMU and have generic images

See also

Upstream GNU/Linux

Modem support

Protocols Implmentation comments
QMI Android <-> RIL <-> libqmi-ril to be completed <-> libqmi
* QMI
* AT
* Other
Android <-> RIL <-> libraries to be written
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)
* According to the README, 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 knwon to work.
* 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 for background information on the Android architecture)
* Replicant and oFono based Java RIL video presentation
samsung-ipc Ofono (rilmodem backend/driver) <-> rild <-> libsamsung-ril <-> libsamsung-ipc * Might be usable for GNU/Linux distributions with libhybris
* Could be usable for testing Replicant as ofono could run on the host computer and the rild socket could be exported with adb
* Some forks exist: check if they still have interesting patches
* https://github.com/rilmodem/ofono
Android <-> rild <-> libsamsung-ril <-> libsamsung-ipc * Currently in use in Replicant
* Well integrated with Android
* Potentially usable by other distributions
* No known way to support different modems protocols in the same Replicant image with that
Android <-> Ofono <-> libsamsung-ipc * An ofono fork with libsamsung-ipc support is available
Patches to add that upstream were refused 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+
* 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
FSO <-> libsamsung-ipc * Probably not easily usable in Replicant
* Is FSO still actively maintained?
* Was used by SHR and potentially other GNU/Linux distributions supporting the Openmoko GTA04 smartphones

Upstream userspace hardware support libraries

Usage Replicant GNU/Linux comments
Bluetooth stack BlueDroid Bluez
GPS hardware support ? gpsd

Upstream non-hardware specific userspace

Usage Replicant GNU/Linux comments
Unix command line tools ? * Busybox
* Coreutils
* Busybox already has Android specific code in it but no Android.mk
* Busybox build is very similar to Linux, and Linux can be built by Android

MTP

TODO:
  • 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.
  • Also compare with other implementation, including the Android one.

libc

Feature Advantages Disadvantages sustainability
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
bionic Android default * You spend lot of time trying to run GNU/Linux debug tools like evtest on Android:
* Parabola cannot be used on old kenrels (FATAL: kernel too old)
* GuiX and libreCMC might not have the package and might need tweaking to be recompiled with an old glibc and kernel headers
* TODO: try crosstool-ng
* Most of the other GNU/Linux distributions are not FSDG compliant or do not support ARM
* The software might not work on Android due to missing bionic functions like versionsort(...)

Other projects interested in using upstream Linux and/or contributing to it

PostmarketOS
pmOS wiki: upstream kernel
pmOS wiki: i9305 with upstream kernel

O-DROID

osmocomBB

Mali

LineageOS

oFono

Parabola

Downstream GNU/Linux

Halium

Some GNU/Linux distributions like Plasma Mobile, LuneOS, Ubuntu Touch use libhybris through the Halium project to reuse proprietary Android libraries

Mer

  • Mer uses ofono for handling the modem
  • 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.

See the Mer architecture for more details.

PostmarketOS

PostmaketOS is probably not using libhybris at all and is instead working with upstream and probably doesn't depend on nonfree libraries

Replicant strategies

Replicant is currently involved with upstream GNU/Linux, but it would probably be a good idea to collaborate more with downstream distributions that don't depend on libhybris.

Upstream Android

LineageOS

See device-support-requirements.md for more information on LineageOS expectations.

Replicant has a script that is able to parse the LineageOS wiki data . That can be useful to find information on devices supported by LineageOS.

The devices supported by LineageOS 16 have either:
  • A Qualcomm SOC with an integrated modem inside (MSM*) for many devices
  • A Qualcomm SOC without a modem inside (APQ*) for many devices
  • A HiSilicon Kirin 970 SOCs for devices like:
  • A Samsung Exynos 7580 SOC for the following device
    • Galaxy S5 Neo (Smartphone): It has shared memory between the modem and the SOC

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.

AOSP and LineageOS

Feature AOSP LineageOS
Code quality Better than LineageOS
Documentation Better than LineageOS
root Not sure if supported or not Supported
Minor release versioning supported with Git tags Not supported.
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.
Despite that, some code was even merged in after the lineage-16.0 release:
commit 22abc3cf4077644463a2dc1c59a5a74e9518ea16
Merge: 9e96d54 8a6b6c3
Date:   Sat Jul 13 18:57:45 2019 +0200

    Merge remote-tracking branch 'aosp/pie-gsi' into lineage-16.0-pie-gsi
GUI features for developers
* Advanced reboot
? Supported

Building a collaboration with other Android distributions

Given that:
  • Replicant doesn't want to support devices that have more freedom issues than the ones currently supported.
  • Many other Android distributions probably don't the same goals with the freedom of the devices they support.
  • Replicant 9 is based on upstream Linux and will have to maintain its userspace libraries.
  • Some users may still want to support devices that have more freedom issues than the ones supported by Replicant.

It could be a good idea to share the maintenance of the code used to make Replicant 9 with other distributions.

Design decisions

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

Various

Feature Advantages Disadvantages
adb and root at boot Easier to debug:
* We get the logs at boot
* May be able to diagnose non-booting devices (partition not mountable, etc)
Way less secure:
* Vulnerable to Juice_Jacking
* Vulnerable to an attacker that just connect an usb cable to a running phone
* Breaks the user's expectation of security (lock screen etc)

root filesystem related

Feature Advantages Disadvantages sustainability
System as root * The kernel size can be bigger
* 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:
* Selecting partitions can potentially be more flexible
System as root + dm-verity + dm-init * The kernel size can be bigger
* The partition selection is flexible and secure
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/

Gatekeeper HAL backend

Background information: Gatekeeper is a daemon that is used to store passwords and other secrets.

Backend used Advantages Disadvantages
simple userspace implementation * Fast to do
* Simple to understand
* Good enough for most use cases
kernel keyring (man 7 keyrings) * Secure
* The Linux kernel is well known and updated regularly
* Some users are already used to the userspace/kernel security model
* Probably fun to implement, can learn how t implement Android daemons and how to use the keyring along the way
Free software Trusted Execution Environment (TEE) * Android does it * Require access to TrustZone, which doesn't work for all SOCs
* Unfamiliar to users and developers (it's supposed to tick in suspend, knowledge about TrustZone is less spread than Linux, etc)
* Probably requires to port a TrustZone OS to every SOC or phone
* The Linux kernel is well known and updated regularly
Proprietary software Trusted Execution Environment (TEE) None: we really want to get rid of it if possible
Cannot be trusted:
* Not free software
* Not under the user control

Handling dynamic major/minor /dev/ nodes

Background information: We can manage to avoid this use case for now.

Backend used Advantages Disadvantages sustainability
Android default + Upstream Linux * does not work by default, probably impossible to make it work as-is
Android default + Upstream Linux + very dirty userspace scripts * Minimal changes * Not robust
* Might eat up resources
* Already implemented cleanly in mdev
Android default + hacked drivers to use fixed major/minor * Minimal changes in Linux
* No changes required on Android side
* Require to change userspace software (libsamsung-ipc) * Not upstreamable in Linux
devtmpfs + hacked Android init * Minimal changes if upstreamed
* Init is hard to debug
* Complex to do as debugging at this stage is complicated * Need to be upstreamed in Android
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

Firmware loading

Backend used Advantages Disadvantages sustainability
system/core/init/firmware_handler.cpp * Stock Android implementation None Already upstream in Android
Something else None The stock Android implementation is good enough and firmware loading is trivial anyway Not upstream in Android

Embeddable web engine

The Android API for embedding a web engine is WebView.

Project Comments
AOSP WebView API implemented with Chromium * Built from Chromium compiled for WebView
* Latest additions to the API seem more and more tied to Chromium (e.g. getWebViewRenderProcess, getWebChromeClient)
Old AOSP WebView API implemented with WebKit * Not used anymore, since Android 4.4
* Does not implement the current WebView API
GeckoView * Not the same API as WebView
* Could be used to implement WebView
* Would need to be modified to expose more features from Gecko (e.g. zoom) while others are straightforward
Qt WebEngine * Not the same API (C++ instead of Java)
* Probably the smallest subset of Chromium available
Wine Internet Explorer implementation * Uses Gecko under the hood
* Might be interesting to look at how they did it

Web engine backend

We have an issue with webview (bug #1780):
  • Using a recent webview based on chromium would create freedom issues as we don't know the license of chromium
  • Using and old webview based on webkit would bring back many security issues

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.

Upstream web browser engine comparison

This lists upstream projects that are not forks tracking another upstream project.

Project Comments
Gecko * Clear licensing
* 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.
Chromium * Unclear licensing
* Google has goals for Chromium that are directly opposed to our goals (tracking, linked to google)
* Probably unfriendly upstream because of the opposed goals
Webkit ?

Forked web browser engine comparison

TODO: Add various chromium versions here.

How and if to implement a webview compatible API

TODO

Tools and build systems

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.

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.

Some other communities have issues that do or could also benefit from that:
  • GNU/Linux distributions need to package Android tools which are built with the custom Android build system
  • Some distributions mixes GNU/Linux and Android

Projects

Project use case Comments
Android * Build images
* Build the Android NDK and SDK
* Build the Android tools
* Can it accept a package manager during build?
* Can it wrap build systems like autotools, cmake, etc?
Archlinux
* Build and package Android tools(Fastboot, adb, etc)
* Build and package the Android ndk and sdk relies on a fragile script
* The package for Android tools is self contained and doesn't have its dependencies (like liblog, libcutils, etc) splited in other packages
Debian relies on custom Makefiles
Guix Findings:
* Guix uses android-make-stub to wrap Android.mk
* We have real packaging of dependencies, however not all dependencies are exported, most are though
* The Android build system is wrapper in a ndk-android-build-system function
* The package definition needs very light and straigtforward patching. See Guix for more details.
The GNU/Linux distribution of quectel-modems Mix an Android kernel with GNU/Linux userspace
AsteroidOS Mix an Android kernel with GNU/Linux userspace
openembedded-android Build the Android NDK? strongly outdated version of openembedded

Updated by Denis 'GNUtoo' Carikli over 3 years ago · 368 revisions

Also available in: PDF HTML TXT