this post was submitted on 22 Jan 2024
22 points (86.7% liked)

Ask Android

2210 readers
1 users here now

A place to ask your questions and seek help related to your Android device and the Android ecosystem.

Whether you're looking for app recommendations, phone buying advice, or want to explore rooting and tutorials, this is the place for you!

Rules
  1. Be descriptive: Help us help you by providing as many details as you can.
  2. Be patient: You're getting free help from Internet strangers, so you may have to wait for an answer.
  3. Be helpful: If someone asks you for more information, tell us what you can. If someone asks you for a screenshot, please provide one!
  4. Be nice: Treat others with respect, even if you don't agree with their advice. Accordingly, you should expect others to be nice to you as well. Report intentionally rude answers.
  5. No piracy: Sharing or discussing pirated content is strictly prohibited. Do not ask others for a paid app or about how to acquire one.
  6. No affiliate/marketing links: Posting affiliate links is not allowed.
  7. No URL shorteners: These can hide the true location of the page and lead people to malicious places.
  8. No lockscreen bypasses: Please do not comment, link, or assist with bypassing lock screens or factory reset protection.
  9. No cross-posting: Please take the time to make a proper post instead of cross-posting.
Other Communities

founded 1 year ago
MODERATORS
 

I recently found out that Android's kernel is VERY different from any Apple implementation. Never really crossed my mind that there are different types of kernels.

This made me wonder - if the microkernel is so much better, at the cost of being complicated to develop an OS for, would Android be better on microkernel?

Please enlighten me. I'm only trying to learn more.

Also, do interact, Lemmy needs good conversation.

top 11 comments
sorted by: hot top controversial new old
[–] Ramenator@lemmy.world 19 points 10 months ago (1 children)

Microkernels aren't better per se than monolithic kernels. Their main advantage is increased security. Only a small portion of the Kernel actually runs in Ring 0, the most privileged level where the code has full access to the computer. Drivers and the like then technically run as separate, less privileged programs that interact with the kernels via messages. This greatly reduces the attack surface on the kernel and prevents crashes or memory access from a faulty driver.
This comes at a cost though. While microkernels are generally more secure, they are also less performant. Each message means overhead and a context switch you don't have in a monolithic kernel.
The discussion between the two kernel types has been going on for the last thirty years and was famously the source for a long argument between Linus Torvalds, founder of the Linux Kernel and Andrew S Tannenbaum, creator of the Minix kernel.
In the end the XNU kernel isn't even a full microkernel, but a hybrid kernel, trying to take the best of both world by originally taking the Mach microkernel and then implementing the 4.3BSD monolithic kernel on top of it. There are even project to do the same with Linux, like L4Linux

Overall the choice of kernel doesn't hold Android back in comparison, Linux is an extremely capable piece of software that runs on anything from small microcontrollers to all of the world's largest supercomputers. Though Google's newest OS project, Fuchsia, actually uses a microkernel for increased security. And it doesn't use Linux because of licensing, but that's a whole other can of worms

[–] ElPussyKangaroo 3 points 10 months ago

So, if needed, would it be possible to add a hybrid kernel to Android?

[–] RiderExMachina@lemmy.ml 7 points 10 months ago* (last edited 10 months ago) (2 children)

This is my opinion as a random person on the internet: no. The kernel only affects what hardware it can be ran on. Everything else that would make a difference to end users is basically done in userspace.

The thing holding Android back is its JVM layer between the kernel and the userspace. This adds overhead, meaning your phone needs more RAM or it will have performance issues. You also need slower default animations to cover up the increased loading times from this overhead, which make the system seem slow, especially when compared to iPhones.

[–] Ramenator@lemmy.world 8 points 10 months ago* (last edited 10 months ago)

I agree with the Runtime being slower. These days Android doesn't technically use the JVM anymore but the Android Runtime, ART for short, that actually performs ahead of time compilation to native code for the byte code for increased performance. Still, the Java Runtime it implements is very heavy and comes with it's own overhead, so native Android code written in Java/Kotlin is generally slower than native iOS code written in Objective C/Swift.

The kernel architecture does influence more than just the hardware it can run on though. Microkernels for example are generally more secure but slower than monolithic kernels

[–] ElPussyKangaroo 1 points 10 months ago (1 children)

So, would it even be possible to change this?

[–] RiderExMachina@lemmy.ml 2 points 10 months ago (1 children)

It's possible to change anything, the main question is the cost of doing so.

Google has already created something called Fuchsia which is reportedly very fast and potentially more secure than Android. But Google already has nearly 20 years of an existing ecosystem in Android that they would effectively be giving up because app manufacturers would have to make new apps for the new system.

They've probably ran the numbers to see how much it would cost to perform the new roll-out vs how much income it would bring, and I would guess that making such a massive change just wouldn't be worth it.

[–] ElPussyKangaroo 1 points 10 months ago

Hmm... That's true.

What about custom implementations? ROM devs?

[–] Atemu@lemmy.ml 6 points 10 months ago (1 children)

This isn't really fit for the Android community because "Android's kernel" is the Linux kernel. Android is more about everything beyond the kernel; the userspace APIs and components that make an Android phone actually work. The kernel is rather unimportant here. Android uses Linux because it's the most mature operating system out there.

Monolith vs. microkernel has been a hot debate in operating systems ever since the concepts emerged.

I personally really like the basic idea behind microkernels (separating mechanism and policy) but can also appreciate that, in reality, the best kernel in existence for general purpose computing is purposefully a monolith while the best a true microkernel (Minix) has achieved is to run CPU firmware.

Do note, over the past decade or so, that Linux has sorta been stealthily laying out the basics to turn itself into something of a microkernel. See https://en.wikipedia.org/wiki/EBPF

Android uses Linux' eBPF for its firewall implementation for instance.

I don't have much experience with Apple's XNU kernel but AFAIK it's not a true microkernel but a lot more of a microkernel than Linux is.

[–] ElPussyKangaroo 1 points 10 months ago

I see... Will read your suggestions...

[–] jvrava9@lemmy.dbzer0.com 2 points 10 months ago (1 children)

Im interacting but I have no idea, curious too.

[–] ElPussyKangaroo 1 points 10 months ago

Waiting for a reminder bot here on Lemmy.