WEBVTT

00:00.000 --> 00:12.680
Yeah, welcome here to Forstem and to my talk with the title insights and statistics about the

00:12.680 --> 00:18.840
Android open source project or in short deep dive into AOSP.

00:18.840 --> 00:25.920
I'm Steven Langfeld, I'm a software engineer for and bettered Linux embedded and what

00:26.840 --> 00:33.040
did this project via deep dive into Android open source project because sometimes I like

00:33.040 --> 00:39.560
to collect all the things so I have a sister project that is called C-Life 555 unofficial

00:39.560 --> 00:46.280
archive and mirror where I collect source code tabels because this project, software project,

00:46.280 --> 00:51.760
does not have a good repository and does not have a tabel mirror system, he just

00:51.760 --> 00:59.440
releases one tabel each month and so this project I collect in tabels but now I've turned

00:59.440 --> 01:07.960
to AOSP and collecting AOSP releases. What was my goal? I wanted to inspect and watch all these

01:07.960 --> 01:16.000
repositories that the Google has on his GitHub service, so the Android.Google.Source GitHub service.

01:16.000 --> 01:20.720
And here you see a screenshot, this is the overview of all the GitHub repositories

01:20.720 --> 01:24.480
or the website where you can also click on the links and dive into the gifu repository's

01:24.480 --> 01:30.640
never interface and I wanted to watch all of the gifu repositories so if there's a new

01:30.640 --> 01:39.040
tag on your branch I want to be informed what is happening there and what also other interesting

01:39.040 --> 01:44.000
stuff is in there that you normally do not see or not notice. What do you need for such

01:44.000 --> 01:49.760
and never requirements here you need good downstream bandwidth enough storage, some compute

01:49.760 --> 01:56.240
power to run some computations and some basic links. So I've not done it on my whole server

01:56.240 --> 02:01.920
because the downstream bandwidth is not good enough so I was going shopping to the Hatsuna server

02:01.920 --> 02:12.320
version and just bought one used server there. 60, 62 bits of RAM, 2 disks, 12 cores, something

02:12.320 --> 02:19.680
machine, Libyan Serbian, tooling what I used to make Python in just hell and what you will

02:19.680 --> 02:27.280
see in these slides I used in plots to draw the graphs but this was my setup to watch and inspect

02:27.280 --> 02:34.960
C. GitHub repositories of an Android and yeah it costs somehow 45 years per month to enter

02:34.960 --> 02:43.920
server. So if you are an ASP engineer you will know that quite well for everyone else this is

02:43.920 --> 02:52.400
a tool or repo tool to check out C source code from Android from ASP so you type repo in it and

02:52.400 --> 02:58.080
then you have this well and then you have a branch the minus b branch and versioning and then you

02:58.080 --> 03:04.320
do a repo sync which then will download all the 200 gigabytes of source code. So

03:04.400 --> 03:10.080
important thing that we come up later so you have this kind of base URL this will note not change

03:10.080 --> 03:16.240
and what the google source.com. Then you have a so-called manifest repository that is containing

03:16.240 --> 03:22.960
XML files describing which other gifted policies to download. Here the manifest repository is

03:22.960 --> 03:29.280
platform manifest then you have a group of release before diving to shortly is that a different

03:29.280 --> 03:35.520
group of releases the Google engineers are doing and you have the version name here we have the

03:35.520 --> 03:41.760
versions 16 dot are four then the six sample and we will come up to all the different parts later

03:41.760 --> 03:49.520
as you talk. A bit of caution I was try to be very accurate with my statistics but yeah

03:49.520 --> 03:56.560
there may be some bugs and issues or things I missed out. So question I've downloaded all

03:56.560 --> 04:02.640
three thousand forty git repository from the Google service and this count is going up steadily every

04:02.640 --> 04:12.080
month and in the end it was 1.6 of that type of byte of git git clone data and now I started to

04:12.080 --> 04:18.240
do the number crunching and look into all the repositories that you find all in these three

04:18.240 --> 04:25.840
thousand repositories. First observation is there is not a single manifest repository for repo

04:25.920 --> 04:32.960
but there are eight different. My first repository is on these Google git servers. So we have kernel

04:32.960 --> 04:41.040
mirror platform. This is a highlighted here because it is a manifest repository set I recently used

04:41.040 --> 04:47.520
and pushed tools or there we see releases are still ongoing. Then there are also other manifest repositories

04:47.520 --> 04:54.320
called accessories below we will come to back that later to train tools and swasti and sees

04:54.320 --> 05:00.560
are updorned manifest repositories. So you see at sea dates for example the last release to

05:00.560 --> 05:09.440
below was done in 2016 we will come to back. So one observation is on this git servers not only

05:09.440 --> 05:15.120
poor and what is released but also a different stuff of things are released in different

05:15.120 --> 05:21.920
manifest repositories and are also putting the count of tax and branches this correlates to the amount

05:22.000 --> 05:28.480
of releases Google as Google engineers is doing there and you see mostly that the main releases

05:28.480 --> 05:33.680
and most of the releases are done in the well known platform manifest repository.

05:35.840 --> 05:41.040
Now we look into the biggest one of these platform manifest repositories where you normally

05:41.040 --> 05:46.160
get your language source code and if you look into the repositories and the tech names on the

05:46.160 --> 05:51.360
branch names you will find different groups of releases. There's not a single type of release for

05:51.360 --> 05:58.720
Android. The common known is the Android Coupe I call that that is the normal AOSP release but you

05:58.720 --> 06:04.720
have also other groups for example you have Android mainline releases you have Android CTS releases you

06:04.720 --> 06:10.720
have Android security platform and RTS releases and also sees a different kind of releases for

06:10.720 --> 06:16.560
these things are also good. Then there's also a group that is called Studio which you see has

06:16.880 --> 06:24.080
a bit of small amount of count count as the count of git repository that is referenced.

06:25.120 --> 06:29.760
So the amount of code and git repository you download when you check out such a release.

06:29.760 --> 06:36.480
So Studio are the Android Studio plugins that are used in Android Studio and also there's a

06:36.480 --> 06:42.160
group called NDK. So the NDK is native to your document kit and also the releases for the NDK

06:42.560 --> 06:50.960
are put into this manifest repository. And yeah and I've put in here the first release date

06:50.960 --> 06:55.680
in the last release date you see the for example and void is still released and would mainline

06:55.680 --> 07:04.880
the last release for in what mainline was 20005022 in May and in March for example we'll come to

07:04.880 --> 07:11.680
back side. This is now the first graph I'm showing, so we are now looking at the first group

07:11.680 --> 07:19.200
of releases. This is the time is on the X-axis, the Y-axis is the count of projects. So as

07:19.200 --> 07:25.200
you may know that Android is increasing in size every release and this is kind of showing that

07:25.200 --> 07:31.120
so the amount of git repositories you have download is increasing with every year and release

07:31.120 --> 07:37.760
of Android. It's kind of a linear increase of amount of stuff that we see in Android and AOSP.

07:39.360 --> 07:46.000
Some details to highlight, you see on the white side this Android 16 release green

07:46.000 --> 07:52.880
thing and the green line is below the release is before, for example, the violet stuff.

07:52.960 --> 08:00.640
So Y has Android 16 less projects. Why does less git repositories are referenced?

08:01.920 --> 08:06.880
This was interesting for me, so I dive into and what I found. One thing I found is that

08:06.880 --> 08:14.480
was previously in the previous releases, the Google engineers have put every wasst dependency into

08:14.480 --> 08:19.920
its own git repository. So we had hundreds of git repositories cloned, but it has

08:19.920 --> 08:26.080
moved Android 16, I've seen not in from the run Android 16. They have changed sets, they have introduced

08:26.080 --> 08:31.520
external wasst and what creates IO. This is now a single git repository containing all the

08:31.520 --> 08:36.480
wasst dependencies and they have some tooling to pull in all the wasst dependencies into a single

08:36.480 --> 08:44.400
bigger git repository. One other thing, why it's decreasing is as we heard in the previous

08:44.400 --> 08:52.560
prep presentations that Google has does not release the Android pixel devices to AOSP anymore.

08:52.560 --> 09:00.960
And also in 2025 in June, they have also removed the repositories from the manifest files.

09:00.960 --> 09:10.000
So therefore also the count of git repositories has decreased. What is other interesting is

09:10.000 --> 09:15.920
that you see on the violet graph. See why that's saying and you see it's the tie and then it's

09:15.920 --> 09:24.560
go down and tie and down and tie it. And what is going there on? The thing is that I've learnt

09:25.840 --> 09:34.160
just in the last year is if you have this and what underscore releases and these releases are done

09:34.240 --> 09:42.400
every month or so. And in the why they have increasing number for example, here below you see a

09:42.400 --> 09:49.120
screenshot of the website code names text built numbers from AOSP and you see the releases are

09:49.120 --> 09:58.160
30, are 31 and are 32. The number is going up. You may think of that as a linear increasing

09:58.240 --> 10:06.000
release with a git repository that is going on linearly. This is not the case.

10:07.600 --> 10:14.960
There are different kinds of families in these are releases. And these families are based on

10:14.960 --> 10:23.120
Icingsy foam models. So also on the website you see note down for which foam models are

10:23.200 --> 10:29.360
released a stamp. For example, you see here that below the R30 is done for pixel nine.

10:29.360 --> 10:35.840
The R31 is done for pixel A and nine A and the 30, so the two is done for pixel six, six

10:35.840 --> 10:42.080
pearl and something. And these are really completely different code bases with different git histories.

10:42.080 --> 10:49.600
So even so the arcing is increasing linearly. It's not really a linear history because

10:49.840 --> 10:56.720
Google has different code bases internally just pushing into a linear history. And also previously

10:56.720 --> 11:05.760
security releases were also done on this normal releases. Back to some statistics,

11:05.760 --> 11:12.240
now here we look into a graph that is counting the files in the top level folders and how

11:12.240 --> 11:18.560
over the different end word versions the amount is increasing. And yeah, the overall file count

11:18.560 --> 11:26.640
is going up steadily. The most biggest folders are, if you know ASP, then you all know that

11:26.640 --> 11:33.440
that's external folders. So all the external dependencies making up more of the half of files of ASP.

11:34.000 --> 11:39.520
Then we also have the previous folder which is quite big continuing to a two-chain binaries

11:39.520 --> 11:47.120
and all of that is also very big. And then you have 20% 30% of actual code in the ASP.

11:49.520 --> 11:55.760
One thing to note that the file count is decreasing in 06. I do not know why,

11:55.760 --> 12:02.720
maybe there was a click in up effort. And in and what's 13 also the amount of files has decreased,

12:02.720 --> 12:10.880
which we also see in the next graph. This is not the file count, but the different file types.

12:10.880 --> 12:16.160
So for example split up in different programming languages, for example.

12:18.560 --> 12:23.920
What I can highlight is for example the big green thing, the big green thing are Java files.

12:23.920 --> 12:29.520
So you see that the majority of one thing to note is that we are not looking into external

12:29.520 --> 12:35.120
and prebles that are cut out in the graph. So just see playing ASP code done by the Google

12:35.120 --> 12:42.640
Engineers. So the majority of code you see in Android and is running in Android is at really Java code.

12:42.720 --> 12:48.800
So we have here more than half of the code is Java files. And yeah.

12:50.240 --> 12:57.760
One interesting to note is for example the transition from MK files to BP files. So from Carti to

12:57.760 --> 13:05.040
Song. For example Carti is the Violet Sing and the Bottom. And you see that it starts to increase

13:05.040 --> 13:12.240
until something and what 9. And then starts to decrease. And with BP files starting to appear

13:12.240 --> 13:18.880
at what round and what 8. And we are increasing until now. And what is interesting as I said

13:18.880 --> 13:24.960
in Android 13. Somehow in Android 13, Google Engineers have removed a lot of Java files.

13:25.680 --> 13:28.320
Maybe something of effort is going on there.

13:28.320 --> 13:36.640
Yeah. Okay. I've told you about the different groups of Android releases. And we have looked

13:36.640 --> 13:42.560
at the main group of Android releases for the Pixel phones. Now we call look into our other

13:42.560 --> 13:48.480
group of Android releases. The security releases. The security releases also date on the bottom

13:48.480 --> 13:55.200
kind of projects at the Y-axis. The Android security releases with this special group tack started

13:55.200 --> 14:03.200
around 2021. Before there was also security releases, but they were done in the normal main group.

14:04.080 --> 14:10.400
And what you see here is that the security releases are really on a very, very regular schedule.

14:10.400 --> 14:16.240
As expected, every month Google Engineers have done a security release for different versions of

14:16.240 --> 14:22.400
Android. And you can see around every point in time you see at least three Android versions are

14:22.480 --> 14:30.480
patched with security releases. What is still interesting is that starting with, here you see the

14:30.480 --> 14:38.800
mouse starting with the mid of 2025, the amount of security releases or the cadence of security

14:38.800 --> 14:46.560
releases has decreased. So we are not seeing any security releases any months, but now any quarter.

14:46.560 --> 14:52.560
And this was announcement by Google or some semi-announcement by Google just one out by the

14:52.560 --> 15:00.160
guys watching that they switched to just quarter-liciturity releases to not monthly security

15:00.160 --> 15:06.880
releases anymore. And this you will find here in this graph and in the data. This is happening.

15:07.680 --> 15:10.480
We have less security releases of Android anymore.

15:11.040 --> 15:17.680
And then I shortly briefly mentioned, and below and end with things,

15:18.720 --> 15:24.800
below was an IoT operating system for Constituent devices.

15:24.800 --> 15:32.080
Thanks. It was, yeah, it's so called Android without Java parts.

15:33.280 --> 15:38.560
If you, it was announced in 2015. If you want to read more about that,

15:38.560 --> 15:44.080
yeah, there's a blog post by Chris Simmons about that. And yeah, and if I've seen,

15:44.080 --> 15:47.680
if you want to check out this source code, it's still there on the GitHub service.

15:47.680 --> 15:52.880
This source code is in the manifest below repository. There's the XML files

15:52.880 --> 15:56.240
where you can point you with repo and send, send, check out this source code.

15:57.360 --> 16:02.320
There are just around 10 launches, so Google, Google engineers did just 10 releases,

16:02.480 --> 16:07.840
open source releases of below. And as already seen, the last update to below was done in the

16:07.840 --> 16:15.680
September 16. And the official, so this was the last source code drop was done. And officially,

16:15.680 --> 16:20.240
the announcement was then done in December 2016 that below was discontinued.

16:21.120 --> 16:25.600
So the official announcement really correlates to the source code changes.

16:26.560 --> 16:30.960
From the election. So, but below was not the last attempt,

16:30.960 --> 16:35.520
below has morphed into Android things. That is an Android variant,

16:35.520 --> 16:39.760
including Java for bigger IoT devices, for example, smart speakers.

16:40.720 --> 16:44.400
See releases were not done in the below manifest repository,

16:44.400 --> 16:48.880
but in the normal platform manifest repository on special launches.

16:49.520 --> 16:53.520
These launches contain the IoT name in it.

16:54.800 --> 17:01.040
Now, first source code drop was in February 17. Last source code drop was in 2022.

17:01.920 --> 17:08.000
And officially, if the first version was announced in 18, yeah, but maybe if you follow this space,

17:08.000 --> 17:12.480
or at this time, follow this space. And what seems as already a thing of the past,

17:12.880 --> 17:18.560
it was shut down. And officially announced to be shut down in 2022.

17:18.640 --> 17:27.760
And the final shutdown was in 2022. And yeah, if you want to check out this source code,

17:27.760 --> 17:33.040
again, it's still there. You can look at it and look at this tech tech's code,

17:33.040 --> 17:37.840
Android and IoT release, something or Android O, and my one IoT release,

17:38.800 --> 17:41.920
something that will find the Android things source code.

17:42.400 --> 17:50.880
Another thing you find in the Git servers and the release history is Android mainline.

17:51.600 --> 17:55.280
What is Android mainline also called Android mainline modules?

17:55.840 --> 18:01.200
The marketing name or the end user name is called and what play system updates.

18:01.760 --> 18:09.200
This is a mechanism in AUSP to patch core components, so stuff on the system partition,

18:09.280 --> 18:16.160
without the involvement of C from Wender, but directly from Google onto the devices

18:18.240 --> 18:19.360
through the Google Play Store.

18:20.880 --> 18:29.200
Called Android mainline, this effort, the goal was there to increase or to allow security updates

18:29.200 --> 18:35.200
to reach and use a device as fast as them. Because OAMs are known to delay or have

18:35.200 --> 18:41.840
troubles patching and what systems. This started around Android 10. If you do AUSP development,

18:41.840 --> 18:46.720
you know the devices by the technical name, the technical name or technical infrastructure is called

18:46.720 --> 18:53.120
apex, the Android phony express container format, and they're around a 30 different

18:53.120 --> 18:58.560
Android mainline modules, so different parts of these systems that can be patched for our

18:58.560 --> 19:04.080
patched or updated, for example, t-set data, timezone data, media, wifi, that's the la la la la la.

19:04.720 --> 19:12.080
And what is nice is this Android mainline releases are also you will also find in the AUSP

19:12.080 --> 19:18.720
Gipropositories and source code. They have switched the versioning scheme a bit, so the first

19:18.720 --> 19:27.440
started with the group and word mainline 12 are 116 something. This is going up very high and nowadays

19:27.440 --> 19:37.200
they switch to technames late like I'm our t-set 2 and I'm our wifi something. And the number

19:37.200 --> 19:46.240
is really quite astonishing, so you see it 183 and 529 releases of Android mainline modules,

19:46.240 --> 19:53.280
so quite a lot of code and charm being done by Google to produce the Android mainline models

19:53.280 --> 20:00.560
and to ship and to ship the security updates, parts of component updates to the Android phones.

20:02.880 --> 20:08.800
Here is a graph about this tech group, so here we see different tech names and word

20:08.800 --> 20:16.080
minus mainline or ML. Again, it's the bottom is the date, it's the date and on the y-axis is the

20:16.080 --> 20:21.120
count of projects. This is a lot of important, the important thing I want to hear hired is that

20:21.120 --> 20:32.000
the first version scheme with Android mainline releases was used from 2022 to 2022 2022.

20:32.000 --> 20:38.000
At that point, say switch to a new version schema, the L underscore something, versioning schema

20:38.000 --> 20:47.680
and pushed the updates to AUSP. The interesting thing is that in I think March, April 2025,

20:48.480 --> 20:55.920
no techs appear anymore. So these are the open, so the Android mainline modules as far as I know

20:55.920 --> 21:01.600
are still done to phone, so on my phone, for example, I still get Android play system updates,

21:01.600 --> 21:07.520
but the push to the open source repository AUSP does not happen anymore. At least I have not

21:07.520 --> 21:15.360
found any reference to the, yeah, to the source code for the Android mainline anymore. But this is

21:15.360 --> 21:26.480
maybe not so surprising because we have seen in 2015 and 25 that a lot of releases to the AUSP of

21:26.480 --> 21:31.680
source code were scaled back, for example, security updates were scaled back or pixel updates were

21:31.760 --> 21:37.680
scaled back. So this is the same, in the same way, that they do not work anymore to update,

21:37.680 --> 21:45.600
to publish the source code of these updates. One last thing you find in the

21:46.160 --> 21:51.760
GPU repositories is Android Automotive. So Android Automotive is part of AUSP,

21:51.760 --> 21:56.880
never the less the automotive group at Google does their own releases.

21:57.840 --> 22:07.760
These releases are you find under the name, Android minus Automotive. As 15, 14, 14, something here,

22:07.760 --> 22:14.240
I also put the link to the source. On the Android page, they have also some release notes there.

22:15.680 --> 22:26.320
Yeah, I think they are 8 until now 8 or 10 Automotive releases of AUS. And they also do a different kind

22:26.320 --> 22:33.200
of release. This is called UB minus Automotive Master. These stands for unbundled apps.

22:34.080 --> 22:40.400
Because the Google Automotive group also releases not only the AUSP source code, but also the

22:40.400 --> 22:47.280
app source code for certain apps. And also these releases you will find in the AUSP source code.

22:47.280 --> 22:50.080
Or manifest the repositories to check out Android.

22:50.080 --> 23:00.160
And if you want to know a bit more about build numbers and release names and QPRs and what

23:00.160 --> 23:07.680
they mean, I can highlight another talk here in the demo. It's by Chris Simmons at 14, 22,

23:07.680 --> 23:15.120
to a 25. A quick look at Android release names and build numbers. If you want to know more,

23:15.120 --> 23:21.680
please stay here and watch also the other talk. And with that, thanks for listening,

23:21.680 --> 23:27.360
comments, questions, ideas. If you want to check out the data, I've collected

23:27.360 --> 23:33.200
the graphs, I've put that on codebook, native repository. And yeah, as I'm also making,

23:35.040 --> 23:40.000
I'm also part of the AUSP dev group. If you want to know more about AUSP and work too,

23:40.000 --> 23:45.680
in the AUSP community, please join our community. But with that, that's everything I want to tell.

23:46.800 --> 23:51.360
Thanks.

23:54.880 --> 23:56.880
We have time for one question.

23:56.880 --> 24:09.360
Okay, no question. Then, thanks and see you.

