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.