WEBVTT

00:00.000 --> 00:24.440
Okay, so good afternoon everyone, my name is Abelete and I am the owner of a company called

00:24.440 --> 00:35.440
Mithene, I have an embedded Linux engineer, I provide services for our clients and today

00:35.440 --> 00:43.440
I'm going to talk about how I updated a few pixel phones to Android 16.

00:43.440 --> 00:51.440
So don't get hang up too much on the versions on the slide, this is mostly for tickbait for the

00:51.440 --> 00:54.440
internet.

00:54.440 --> 01:01.440
So do we have an appellate sense problem in the consumer smart phone industry?

01:01.440 --> 01:12.440
The short answer to that is yes, we do have recently, OEMs, I've been providing five

01:12.440 --> 01:21.440
years of software update and more for the key players, but that was up until now generally around two

01:21.440 --> 01:22.440
years.

01:22.440 --> 01:28.440
And what happens when that turns ends, what happens is that your device is no longer supported,

01:28.440 --> 01:38.440
which means you no longer receive major OS upgrades, and this expose you to security issues

01:38.440 --> 01:41.440
and lack of feature improvements.

01:41.440 --> 01:48.440
So you are no longer receiving updates that are shipped built into the OS itself.

01:48.440 --> 01:56.440
I'm not talking about features that are delivered through application updates.

01:56.440 --> 02:04.440
Thanks to supply and demand dynamics, there have been a rise in companies providing business

02:04.440 --> 02:09.440
to business, alternative update channels to other companies, obviously.

02:09.440 --> 02:15.440
And case in point, last year at first then there was a company called Interior that was

02:15.440 --> 02:16.440
such a case.

02:16.440 --> 02:22.440
So if you haven't seen that talk, I encourage you to go ahead and see that.

02:22.440 --> 02:25.440
But what about you and me, individual users?

02:25.440 --> 02:30.440
What can we do when we end up with devices that are no longer supported?

02:30.440 --> 02:33.440
Is this a case for the custom ROM community?

02:33.440 --> 02:38.440
And first, I would like to define what is an Android customer.

02:38.440 --> 02:44.440
So we can compare custom ROMs to Linux distribution.

02:44.440 --> 02:51.440
If I take the case of, for instance, lineage OS, which is one of the key custom ROM,

02:51.440 --> 02:59.440
they can be compared to, so I would say that lineage is to Android what they then is to Linux.

02:59.440 --> 03:06.440
So basically, they are doing most of the platform work upon which other custom ROMs are relying

03:06.440 --> 03:09.440
to provide the reveals of Android.

03:09.440 --> 03:15.440
So those, these projects are providing the reveals of Android.

03:15.440 --> 03:26.440
And they give users the choice to run with or without Google Apps, depending on what you need to do with our device.

03:26.440 --> 03:38.440
One other thing to note before being able to use an alternative system image is to make sure that your device and search your OEM allows it.

03:38.440 --> 03:43.440
So the device needs to have a bootloader kit that can be replaceable.

03:43.440 --> 03:49.440
That means that you need to be able, when you choose to do so, to unlock your bootloader.

03:49.440 --> 03:53.440
Some manufacturer nowadays still does not allow that.

03:53.440 --> 03:57.440
And some of them are backtracking on that authorization.

03:57.440 --> 04:00.440
So some of them were allowing it up to now.

04:00.440 --> 04:05.440
And they are reversing course because of economic incentives.

04:05.440 --> 04:09.440
Also, you need to have access to some key software components.

04:09.440 --> 04:14.440
You need to have access to the sources to the Linux kernel, because Android is big on the Linux kernel.

04:14.440 --> 04:18.440
And you need to have access to the sources of the BSP for your device.

04:18.440 --> 04:32.440
So all the sources to the drivers and specific components that needs to be built into your device in order to ensure that the peripherals can work as expected.

04:32.440 --> 04:37.440
One thing to note is that Google has speedheaded project travel.

04:37.440 --> 04:47.440
I think it's almost a decade now that has significantly improved the situation by unifying the bills of the Linux kernel for Android.

04:47.440 --> 04:51.440
So it has improved the situation for us.

04:51.440 --> 05:00.440
So how do we deal Android for commercial smartphones after the end of live support for these devices?

05:00.440 --> 05:09.440
One thing you need to know is that the sources in Android for device are usually speeds in what we call trees.

05:09.440 --> 05:13.440
So we have the device tree.

05:13.440 --> 05:17.440
This is different from the semantic of device tree in the Linux kernel.

05:17.440 --> 05:30.440
The device tree in Android is a set of configuration files that are needed to make sure that your specific device is configured for the build you are doing.

05:30.440 --> 05:38.440
So you can have multiple device relying on the same board, on the same base, how to platform.

05:38.440 --> 05:43.440
But there are different because they don't have the same IOs and the same territory for us.

05:43.440 --> 05:47.440
So the device tree will take care for different configuration.

05:47.440 --> 05:49.440
Then you have the Dendertree.

05:49.440 --> 05:58.440
Those are generally binary blogs and include source files that are needed to ensure that the hardware still function correctly.

05:58.440 --> 06:05.440
Typically, a camera hardware relies on vendor blogs.

06:05.440 --> 06:14.440
And the way to get those is either to extract them from the original stock image files.

06:14.440 --> 06:18.440
So within the community we have strips doing that nowadays.

06:18.440 --> 06:19.440
It's easier.

06:19.440 --> 06:32.440
Or if you're not a developer and not a kid to do that kind of work, you can search online for repository that already provide those kind of trees.

06:32.440 --> 06:35.440
Almost finally you have the kernel tree.

06:35.440 --> 06:45.440
So Android is based on the Linux kernel and you need to be able to read the kernel for your device to get a complete system image.

06:45.440 --> 06:50.440
And depending on the device, you can also have extractories.

06:50.440 --> 07:04.440
For instance, Samsung is known to have multiple extractories because they provide additional features that other manufacturers do not provide.

07:04.440 --> 07:14.440
And also for instance, Google may release for a specific year, a single year, multiple devices that share a common code base.

07:14.440 --> 07:22.440
So there will have some of that code base in separate trees, separating the common code base from the specifics of the device.

07:22.440 --> 07:31.440
So in that case, you also need extra trees in your in your build.

07:31.440 --> 07:43.440
Everything else apart from the device with the Vendertree and the kernel tree and those extra trees is a common code base for the Android custom ROM that you are building.

07:43.440 --> 07:51.440
So it could be considered as the basis of the distribution.

07:51.440 --> 07:56.440
So how did I end up choosing evolution X and for what device?

07:56.440 --> 08:05.440
Short answer to that question is that I chose evolution X because I considered it to be one of the best custom ROM around.

08:05.440 --> 08:08.440
I'm going to make enemies here, I think.

08:08.440 --> 08:17.440
But it's true. And the reason why I did it for the pixel for a is that it is the device I had at hand at the time.

08:17.440 --> 08:22.440
It was my daily device. And it started because two reasons.

08:22.440 --> 08:30.440
The first was that I bought it at the time of release and I used it until it reached end of life support.

08:30.440 --> 08:33.440
So that was around Android 13.

08:33.440 --> 08:36.440
I was wondering if I was going to buy a new device.

08:36.440 --> 08:39.440
I didn't want to because I very much liked that device.

08:39.440 --> 08:46.440
It was small and it got features that you cannot see nowadays in the device with that form factor.

08:46.440 --> 08:50.440
Have fun, jack, a reliable thing, a thing scanner.

08:50.440 --> 09:02.440
And what triggered me is that one year after the end of the support, Google issued what you may recon as the battery killer update.

09:02.440 --> 09:08.440
So basically one year after the end of support, they issued a mandatory software update.

09:08.440 --> 09:11.440
So you cannot choose to apply or not to apply it.

09:11.440 --> 09:16.440
And it was to mitigate a so-called issue about overheating battery.

09:16.440 --> 09:22.440
I was not in that case. My battery was functioning perfectly fine. My device was fine.

09:22.440 --> 09:29.440
And after receiving that update, I realized that my battery capacity was cut in half.

09:29.440 --> 09:38.440
So I was based and I started looking into an alternative system image to continue using my device.

09:38.440 --> 09:41.440
And the reason why I ended up using evolution X.

09:41.440 --> 09:46.440
One thing to note is that most of the custom ROM are based on lineage OS.

09:46.440 --> 09:54.440
As I said, they provide the tremendous work on the platform level for every mostly every other custom ROM to use.

09:54.440 --> 10:01.440
The reason why I didn't choose lineage was that I was already relying on the Google ecosystem.

10:01.440 --> 10:09.440
And I wanted to be able to get updates easily, not having to fiddle with installing the Google app separately.

10:09.440 --> 10:19.440
And also by the time I started this experiment, the official mentor for the Pixel for a attribution X left.

10:19.440 --> 10:23.440
So I need to be able to read the image for myself.

10:23.440 --> 10:32.440
And this project provides very good documentation, which is very rare for developers to do so.

10:32.440 --> 10:38.440
We like writing good. We don't like writing the documentation. They have very good documentation.

10:38.440 --> 10:40.440
Could as to the team doing that.

10:40.440 --> 10:46.440
So my learning curve was facilitated by the fact that they have a strong and helpful community.

10:46.440 --> 10:55.440
People are very nice over there. And I started by first rebuilding the last known official release, which was 9.2.

10:55.440 --> 10:58.440
So this was the one based on Android 14.

10:58.440 --> 11:04.440
So they started before that, before the end of life, then they continue upon Android 14.

11:04.440 --> 11:08.440
So I picked up from there. I successfully rebuilt it.

11:08.440 --> 11:13.440
And I tried to keep up with the monthly security update because it mattered to me at the time.

11:14.440 --> 11:20.440
And then I got hooked and tried to jump to one major release to another.

11:20.440 --> 11:24.440
So let's see in more details how to do that.

11:24.440 --> 11:31.440
So basically, what you need to know about Android is that the sources are managed by your tool called repo.

11:31.440 --> 11:36.440
So repo is a superset on top of git.

11:36.440 --> 11:43.440
So it managed multiple repositories at once where git only managed one repository at once.

11:43.440 --> 11:46.440
So when you use repo, you need to first declare a manifest.

11:46.440 --> 11:55.440
The manifest is a file, a next and a file that defines where from where you are going to fetch all your sources.

11:55.440 --> 12:03.440
So as you can see, I'm declaring here the sources for my device tree, my inventory, my kernel tree.

12:03.440 --> 12:11.440
And you realize that I'm fetching most of the sources from lineage as they are providing the platform work, right?

12:11.440 --> 12:17.440
So who does for to do this job? Because it's a tremendous amount of work.

12:17.440 --> 12:24.440
And it's not easy to keep up with the pace at which Google is releasing this update.

12:24.440 --> 12:32.440
So once you have a working manifest file, you basically fetch all the sources with the command repo.

12:32.440 --> 12:36.440
I'm not putting the complete command here because it doesn't matter.

12:36.440 --> 12:41.440
You just need to know that repo repository with a specific set of arguments.

12:41.440 --> 12:43.440
And it catches all the sources for you.

12:43.440 --> 12:51.440
If you are, if you want to do this at truth by yourself, I encourage you to go to the week in the documentation of the project you are interested in.

12:51.440 --> 12:54.440
And that's the specific arguments.

12:54.440 --> 12:57.440
After fetching the sources, you need to configure the build.

12:57.440 --> 13:02.440
And also this is taken care of by the name of the manifest.

13:02.440 --> 13:13.440
So for my device, the specific common is lunch, lineage, some fish, which is the code name for the picture for A, AP2A, which is the code name for the release.

13:13.440 --> 13:16.440
So AP2A is the code name for Android 14.

13:16.440 --> 13:24.440
And then I'm doing a user debug deal here.

13:24.440 --> 13:29.440
Then you start compiling with the command and evolution.

13:29.440 --> 13:31.440
It basically started the build.

13:31.440 --> 13:35.440
After which you wait.

13:35.440 --> 13:38.440
And you wait some more.

13:38.440 --> 13:44.440
There was a talk yesterday about why Android deals are so slow.

13:44.440 --> 13:48.440
And there are, there are indeed very, very slow.

13:48.440 --> 13:51.440
A typical build on my dedicated mission.

13:51.440 --> 13:56.440
So not this laptop, but I have a dedicated build machine, which is an ND,

13:56.440 --> 14:00.440
Reson 7 machine.

14:00.440 --> 14:03.440
So it's not that all of a CPU.

14:03.440 --> 14:08.440
I have 128 GB of RAM and all SSDs.

14:08.440 --> 14:17.440
And it still takes me two hours and a half to complete a build from start to finish, which is a very long time.

14:17.440 --> 14:18.440
To do a bit.

14:18.440 --> 14:22.440
And this is, in the case where I only do one build at the time.

14:22.440 --> 14:29.440
If I run multiple builds, that time gets up.

14:29.440 --> 14:33.440
And the good side is that rebuilds are usually faster.

14:33.440 --> 14:44.440
So they take 45 minutes to, I don't know, from 30 minutes to 45 minutes, in my case, unless it tears.

14:45.440 --> 14:49.440
And when you are starting with that this kind of endeavor, it usually fails.

14:49.440 --> 14:58.440
We are going to see why, what kind of issues you can face when you are starting to rebuild your own system image.

14:58.440 --> 15:07.440
So this is the kind of issue I faced quite regularly from one release to another.

15:08.440 --> 15:16.440
It is an issue with what is called in a USB in Android, the framework compatibility metrics.

15:16.440 --> 15:29.440
Basically, those are external files that define which version of what software component you need to build into your system image to make use of your hardware.

15:29.440 --> 15:44.440
It is a way for vendors to use multiple boards for a same family of hardware by doing different system deals.

15:44.440 --> 15:51.440
So you want to do a build for the same family of boards, but with different iOS.

15:51.440 --> 15:55.440
So the difference will be in the configuration of the software you are using.

15:55.440 --> 15:58.440
And this is done in those FCN.

15:58.440 --> 16:08.440
Basically here, it says that the device manifest does not follow the framework compatibility metrics.

16:08.440 --> 16:11.440
So this is one of the issues.

16:11.440 --> 16:21.440
Another one, which is less frequent, but it can happen, is failure to build the Linux kernel.

16:21.440 --> 16:29.440
In this case, I ended up summing upon an issue where there was a breakage in the Linux UAPI.

16:29.440 --> 16:31.440
So the user API of the kernel.

16:31.440 --> 16:34.440
There was a specific type called structs.

16:34.440 --> 16:41.440
That was defined in the user space API, which was also defined by the GVPC.

16:41.440 --> 16:46.440
So we have two definitions by two different components.

16:46.440 --> 16:50.440
So I needed to do a local definition of that type in my kernel.

16:50.440 --> 16:55.440
And hopefully for me, this issue is already known, upstream.

16:55.440 --> 16:57.440
It was fixed in the Linux kernel upstream.

16:57.440 --> 17:03.440
But the picture for A is using kernel for the 14, which is quite old.

17:03.440 --> 17:06.440
So at that time, the issue was not fixed.

17:06.440 --> 17:14.440
So what I did instead of reinventing the wheel was I terri-picked the patch that was sent upstream to fix in the Linux kernel.

17:14.440 --> 17:18.440
And lastly, another type of issue I important.

17:18.440 --> 17:24.440
But this happens to me only once, which is a breakage of API.

17:24.440 --> 17:25.440
This is quite rare.

17:25.440 --> 17:38.440
What happened is that I have a software component written in C++, open source, which was pulling a library.

17:38.440 --> 17:43.440
I didn't know of for the Wi-Fi direct functionality.

17:43.440 --> 17:48.440
So this is related to casting in Android.

17:48.440 --> 17:54.440
And when pulling that library in and linking to the library, it was missing a symbol.

17:54.440 --> 17:59.440
That was not defined in the binary blob I was linking against.

17:59.440 --> 18:03.440
Hopefully for me, it was written in C++ and open source.

18:03.440 --> 18:11.440
So I just had to do a week definition in C++ of the missing library to fix the issue.

18:11.440 --> 18:16.440
I don't know what I would have done if it was close source or not C++.

18:16.440 --> 18:20.440
But I see how my finger crossed that this does not break.

18:20.440 --> 18:24.440
And it's a significant feature in the future product device.

18:24.440 --> 18:28.440
So it was a successful experiment.

18:28.440 --> 18:30.440
I was able to read the Android 14.

18:30.440 --> 18:38.440
And I took it upon myself to do the jump to Android 15, which was already at the time.

18:38.440 --> 18:43.440
The version the maintainers were working on.

18:43.440 --> 18:49.440
And then the jump to Android 16 using the same process.

18:49.440 --> 18:54.440
I got hooked because I was able to get a very old hardware.

18:54.440 --> 18:58.440
Very old according to the industry hardware.

18:58.440 --> 19:02.440
And that very up to the software on it.

19:02.440 --> 19:07.440
I had the Pixel for FID and Pixel 5 also in my cabinet.

19:07.440 --> 19:10.440
Those are small phones and old devices.

19:10.440 --> 19:18.440
So I did the same for those devices that are also abandoned on Android 13 or maybe 14.

19:18.440 --> 19:23.440
Because I realized that there are people that are still using those devices.

19:23.440 --> 19:25.440
I became maintainer at Evolution X.

19:25.440 --> 19:29.440
And I was able to add my three devices to their processor.

19:29.440 --> 19:34.440
And I think we have, after lineage, one of the biggest roaster of devices.

19:34.440 --> 19:41.440
So I really think we have one of the best custom ROM after them.

19:41.440 --> 19:49.440
One of the benefits for me joining as an official maintainer was to rely on the project CICD

19:49.440 --> 19:52.440
Continuous Integration and Continuous Delivery Infrastructure.

19:52.440 --> 20:01.440
So on a set of servers and infrastructure to have some kind of automated build pipeline.

20:01.440 --> 20:05.440
Because having worked in the industry,

20:05.440 --> 20:11.440
I know that there are companies that have not that kind of level of CICD infrastructure.

20:11.440 --> 20:16.440
And having this allows us to provide OTA updates,

20:16.440 --> 20:20.440
which means users can get updates over the air,

20:20.440 --> 20:24.440
but without having to refresh their device every time.

20:24.440 --> 20:26.440
This is a huge win.

20:26.440 --> 20:29.440
And it means that we are at the level of OEMs.

20:29.440 --> 20:34.440
And we're doing this basically for free.

20:34.440 --> 20:37.440
This is huge.

20:37.440 --> 20:48.440
And I also was surprised that there are quite a significant numbers of people that are interesting in still using their phone.

20:48.440 --> 20:54.440
They don't want to follow the trend and just buy new devices just because the market says so.

20:54.440 --> 21:02.440
And it is important for us to be able to keep this trend alive.

21:02.440 --> 21:04.440
So what next?

21:04.440 --> 21:08.440
I will personally strive for more monthly safety updates.

21:08.440 --> 21:15.440
So right now I try to update my device at least once a month to provide security updates for my users.

21:15.440 --> 21:21.440
And because I also use evolution X on the daily basis, my personal phone, personal and work phone.

21:21.440 --> 21:23.440
So this is important to me.

21:23.440 --> 21:26.440
And I also strive to do major OS upgrades.

21:26.440 --> 21:30.440
So I went from 14 to 15 to 15 to 16.

21:30.440 --> 21:34.440
And hopefully I will be able to do the jump from 16 to 17.

21:34.440 --> 21:35.440
Hopefully.

21:35.440 --> 21:40.440
But we need to keep in mind that Google is changing the name of the game.

21:40.440 --> 21:55.440
So starting from 20 to 26, the announced that they will only do the code drop of the open source Android project twice a year instead of doing continuous release before.

21:55.440 --> 22:07.440
So we are only going to get the the code drop in Q2 and Q4 of each year, which means we have we will get more what to do every year.

22:07.440 --> 22:11.440
If they keep with the promises.

22:11.440 --> 22:33.440
Finally, I would like to encourage you to contribute to project as users or as developers because our community is based on the fact that we need to keep contributing to open source software.

22:33.440 --> 22:38.440
Without contribution to open source software, this kind of project cannot happen.

22:38.440 --> 22:44.440
So evolution X rely on contributions and lineage OS rely on contribution.

22:44.440 --> 22:54.440
So whatever you can do provided documentation, help testing or anything, please do so as long as you can and as much as you can.

22:54.440 --> 22:56.440
Thank you very much.

22:56.440 --> 22:57.440
That's it for me.

22:57.440 --> 23:09.440
If you have questions, now will the point.

23:09.440 --> 23:13.440
So I have a phone of 2014, I think.

23:13.440 --> 23:14.440
Okay.

23:14.440 --> 23:16.440
Problem going to update tomorrow.

23:16.440 --> 23:21.440
And I thank you all incredibly for this for this project, I think it's amazing.

23:21.440 --> 23:32.440
Something that I miss sometimes because I often handle these old phones are the kind of really shady structure out on look to bootloader.

23:32.440 --> 23:38.440
It just like has the vendor for a specific code and then do this and this and this and this.

23:38.440 --> 23:43.440
And this kind of stop me sometimes because I don't want to install a frame software.

23:43.440 --> 23:56.440
I have some insights or something under the documentation for for this kind of cases that will allow more people to install custom ROMs.

23:56.440 --> 23:57.440
Okay.

23:57.440 --> 24:02.440
So the question is regarding to the status of bootloader when it is unlocked on devices.

24:02.440 --> 24:12.440
Do we have a way to facilitate the installation of custom ROMs in the communication between our laptops and devices to do that kind of work?

24:12.440 --> 24:21.440
So nowadays we basically rely on ADD and fast-world to write software to automate that process.

24:21.440 --> 24:33.440
And there are two major custom ROMs graph in and colleagues who are providing web UI based in solution to us to automate this process.

24:33.440 --> 24:37.440
So it's easy for people using this custom ROM to install it.

24:37.440 --> 24:43.440
We still don't have it at evolution X but this would be a way to facilitate installation.

24:43.440 --> 24:52.440
But keep in mind that if you choose a custom ROM that provides OT updates and you are following the official releases,

24:52.440 --> 25:00.440
the hurdle you have to overcome it only once the first time after that you have OT updates.

25:00.440 --> 25:03.440
So this is also a solution.

25:03.440 --> 25:08.440
So yes, it's not easy but it can be done.

25:08.440 --> 25:10.440
Thank you very much.

