Introducing the LineageOS SDK
lineageos.org
lineageos.org
But it's no small challenge, right? I'd suppose that regression testing these features against a bunch of devices requires lots of human interaction or complex test scenario descriptions.
Binary blobs come from the OEM's system image, I can't recall when that isn't the case.
If I ever buy another android device I’m going to treat it like an iOS device and not even bother with the tinkering aspect. It’s too much of a mess to be enjoyable for me.
A big struggle is that things vary so much device to device.
General TWRP documentation can be provided by the core maintainers, but each device really needs a maintainer and there's no system of ensuring that each maintainer is documenting with the same rigor.
After some time a device will fall off and no longer be considered officially maintained (See TF101: https://twrp.me/asus/asustransformerTF101.html which I used to maintain). There's not much that the project can do about that.
If you've got suggestions or would like to help get the documentation into better shape, I'm sure folks in #twrp on freenode would be happy to chat.
I think it should be an ambition of the project, while remaining open source, to fill those holes. There are open source workarounds in the wild but they are not so easy to use. Google works against them with seemingly every update to android, and Lineageos helps Google by refusing to support signature spoofing. The mechanism by which use of alternatives is even possible.
Lineageos says that it supports an experience free from Google Play Services but in practice use of Lineageos without it requires a custom build of the operating system. Which is too bad, I think that would be a reasonably large portion of the potential user base.
MicroG has been picking up steam. They're doing OTA updates of Lineage + MicroG now.
Here is a relevant discussion: https://news.ycombinator.com/item?id=15617615
Play services is responsible for connectivity with Google's servers which are used to distribute notifications to the device.
Play services is probably also responsible for backing up the App's data to Google servers (not sure about this one)
I've been running LineageOS 14.1 on a Sony Xperia tablet for several months without Google Play Services or MicroG and am not noticing any missing basic functionality. I do tend towards open source apps and away from Google stuff but I'm by no means strict about it. I use Yalp and F-Droid to install apps.
Some of the apps I have installed (eg. SnapSeed) complain about missing Google Play Services and say they won't function but I ignore the warning and they seem to operate correctly... if there's some missing functionality I've yet to encounter it, I'm happily editing and exporting photos.
I'm certain that some apps would fail to function without Google Play Services, just that I don't happen to have fallen foul of any of them. My usage is probably not hugely standard but I use modern browsers (Chromium/FF), video/audio players (VLC/Black Player/Spotify), K9 for email, browse and edit RAW photos... and jump into Debian Stretch via Linux Deploy + Xserver XSDL where I often do web dev work with tmux/vim and proper desktop Chrome/FF including Developer Tools. I'm using a Bluetooth keyboard and speakers... can't really think what basic things I might be missing?
EDIT: (this is just the standard install of LineageOS btw - which doesn't come with Google Play Services, you have to install them separately - I just skipped that step)
How's that work for you? I've tried it but it seemed a little rough.
FYI Even without GAPPs lineageOS contacts Google with IMHO way too much information, for example when you connect to a WiFi network a request to Google is made.
Example.com is for examples (so that if you copy & paste my code, you don't do weird things). I am not convinced that example.com would appreciate the worlds phones to use it at a whim..
(Plus, I'm not sure that's possible without controlling the domain. Not sure if the current ways to detect a capture portal are satisfied by a random 200 OK or actually _check the content_ of the reply. Which needs you to control said content)
I honestly don't see a good reason to do it although one of my friends pointed out that using TOR is probably one of the better ways to check for this since it won't rely on a specific server.
Firefox will make these requests as does Google Chrome and Chromium. NetworkManager will do them too and various GUI tools for network configuration will try it.
Otherwise Captive Portals would simply break your internet without notice.
GPS & maps: Google Maps and Open Street Maps both work normally.
IM: Whatsapp, Telegram, Skype work normally (but I suppose they make use of a custom notification system)
Browser: Firefox seems not to care about play services
Media: Vlc, Netflix, MX Player are all fine.
Also, why do you think there is such dearth of custom phone OSs unlike the linux scene?
I believe this update was mostly around styles, "Change the system accent to some color based on some event" was listed in the blog post earlier, along with night mode.
I've been interested in LineageOS, but not enough to carry around a phone with an unlocked bootloader.
If the update feature's enabled, there's a chance that after an upgrade, recovery gets updated to a version that no longer boots. We don't QA every build like you see from an actual OEM, they're provided as nightly builds (on a weekly basis). One bug and your expensive device is now a brick.
Personally I try to stick to something with an unlocked bootloader. That was the Nexus line, now Pixels (except a/b updates are still a bit rough under lineage)
"Please see Wikipedia" under a dictionary excerpt looks like it's sending me to learn what the word means.
I'm currently working to bring my old Galaxy S2 back to life, but I have the Sprint-exclusive version of the phone: the D710, not the international i9100 that everyone else has.
Are there any guides on how to port LineageOS for the i9100 over to the D710? I imagine this is a common problem for anyone who has bought carrier-specific hardware, but I'm not familiar enough with LineageOS to intuitively know how to do it.
Thanks for your work on this project!
TWRP is fine, but full device encryption is not supported on all device that are supported by lineageos, and also it dosen't seem to support OTA update from lineageos updater.
ps: Thanks for the AWESOME work!
In normal AOSP land, there is no encryption support in recovery. I know we had the same restriction in cm recovery (you couldn't mount/backup individual files from /data, for example). I sadly have no more information on a lineage recovery right now.
I have noticed a bunch of relatively minor bugs. I believe they affect LineageOS directly as well, as I've also seen some of them on an old device that was using LineageOS directly.
How should I go about reporting these bugs? Do you want the reports?
These are things like "Changing the default SMS SIM card to SIM card 2 does not survive a reboot", "Adding an all-day calendar entry for multiple days loses the last day upon save if the timezone is London (GMT) and not in daylight saving", "Messaging app deletes all messages when the phone boots believing it's 1970 because the clock isn't set yet" and "Setting the year to 2018 after the phone boots up believing its 1970 is really difficult because the year box doesn't scroll far enough".
That being said I threw this in the project's slack.
Take a look here for more info on how we do bug reports currently: https://wiki.lineageos.org/bugreport-howto.html
[1] https://review.lineageos.org/#/c/167033/
[2] https://www.reddit.com/r/LineageOS/comments/630f9x/why_were_...
What would be a good way to promote transparency and trustworthiness of the alternative rom tooling? Or is there an alternative set that just doesn't jump out when searching for the tools?
fastboot is open source. That's literally all you need to unlock the bootloader on a great number of phones. The vast majority of users don't need to root their phones, and doing so is a pretty big security hole for the users that think they need to.
On the other hand, your alternative is to stick with OEM/carrier OSes, which are quite obviously compromised for benefiting the OEM/carrier and not the user.
I agree the majority of users make do without this, and so have little choice but to send their phone data to Google servers for migrating / backup.
Edit: this looks promising: https://github.com/M66B/NetGuard/blob/master/README.md
Successfully being used on a 1st-gen Moto Z Play, no root, stock firmware. Works great.
That said, as far as I understand this DNS66 thing only intercepts DNS requests (which yes, it needs to break apart and reassemble) and nothing else? That is - if you don't talk to a server that is part of the application's custom DNS server list or a DNS server given to you by your network configuration, then I'd expect this packet to bypass the VPN entirely.
Maybe someone who understands the Android VPN service thing a bit more can chime in and confirm?
Afterwards, you can enable root in the Developer Options.
You don't need Chainfire's SuperSU, if that's what you're referring to.
And then you have all the single developers working on their own devices. Why can't Lineage pull their work, do basic code review, and publish them as "beta" (and you get free beta testers)?
Despite being based on AOSP, omni/lineage/etc all have pretty different features, so usually it takes a nontrivial amount of effort to go between the two (although it's definitely less effort than starting from scratch)
Most devices within the project are maintained by single developers - the difference is that official devices have been submitted to us and have everything working.
We don't blindly support devices (even as "beta") because we have no way of verifying that everything actually works (e.g. blobs that depend on an old C library ABI can't really be detected before runtime, afaik). Shipping stuff that's broken is something we'd like to avoid. The idea is that when you download a LineageOS build from lineageos.org you know that it'll work flawlessly (that may not always be the case, but it's the goal :P)
>Despite being based on AOSP, omni/lineage/etc all have pretty different features, so usually it takes a nontrivial amount of effort to go between the two (although it's definitely less effort than starting from scratch)
I understand, the same way that Firefox and Chrome are very different, yet work on the same kernel, or are the differences between Lineage and others that deep?
So for example, Omni has athene up and running on Oreo, while despite officially being maintained (with three maintainers at that), according to Lineage OS' code review, it hasn't been worked on since last July.
So the way I see it (coming from a dev, though not a ROM dev): Android has multiple layers. It has hardware-dependent code (such as the kernel) and hardware-independent code (such as bionic or Java), sort of like in Desktop Linux you have the kernel and X, and there's bash, gnome and Firefox.
So why can't (I know how that sounds coming from the outside ... ) you take their hardware code (the kernel and whatever the Android equivalent of X is) and build on top of that? Is the whole system that integrated?
On the other hand, now that Treble officially separated the two, will it be possible to, for example, flash Omni and then flash a lineage image on top of that?
>We don't blindly support devices (even as "beta") because we have no way of verifying that everything actually works
But does every Debian maintainer (of a userspace program like, say, MySQL) have every combination of hardware? You just assume that the kernel and libc are a reliable abstraction and go from there. Is that impossible on Android?
Yeah, that's pretty much it.
>So why can't (I know how that sounds coming from the outside ... ) you take their hardware code (the kernel and whatever the Android equivalent of X is) and build on top of that? Is the whole system that integrated?
We could - and it would definitely be a good start - but there would be changes necessary because e.g. our extra bits are implemented differently, maybe our "device-independent" bits are missing some commits that Omni has that fix support for some OEM driver - before treble, Android's hardware-dependent code and hardware-independent code were often both modified by OEMs/SoC manufacturers in order to fix issues on their platforms/add extra features. So Omni might have some fixes that we don't have, and vice versa.
>But does every Debian maintainer (of a userspace program like, say, MySQL) have every combination of hardware? You just assume that the kernel and libc are a reliable abstraction and go from there. Is that impossible on Android?
It's much harder on Android, because there's so many blobs built against previous platform releases (often with extra ABI changes from the OEM added on top). That means we can't assume that the ABI is consistent: for instance, we've had nasty bugs in proprietary binaries caused by AOSP adding fields to structs. Whereas on Debian, everything's kept in-step, so they don't end up with ABI mismatches all over the place.
Hopefully with Treble, a lot of this will change - so the idea of a "universal Lineage image" might be possible.
This is a bit like Google Play Services, once you integrate it you’re no longer relying on base Android features. While you can engineer around it, it has the effect of closing off apps that rely heavily on it from the larger Android ecosystem.
LineageOS is on the fringe though, and this SDK will be open, so I’m not as worried as I am about GPS.