O GNU/Linux de que estamos falando é o mesmo usado em 99% dos 500 computadores mais poderosos do mundo. A questão é qual a diferença entre este e aquele instalado nos nossos smartphones ou smartwatches?
Naturalmente, no curso do seu desenvolvimento, desenvolvedores do Google fizeram algumas mudanças ao kernel Linux. A quantidade de mudanças não chega a ser extremamente grande — aproximadamente 250 patches, com mais ou menos 3 Mb de diferenças em 25 mil linhas de código.
As mudanças incluem uma variedade de adições ao código, algumas grandes outras pequenas.
As alterações vão da adição de todo um sistema de arquivos para mídias SSD (YAFFS2) a pequenas mudanças no sentido de aumentar a segurança no Linux (paranoid networking).
O interessante no design do Android é o quão pouco modificamos o kernel. (Robert Love, desenvolvedor do Google)
Muitos sistemas embarcados fazem mudanças drásticas no kernel Linux e quase não alteram o user-space.
No caso do Android, foi feito o mínimo de mudanças no kernel — e profundas alterações no user-space ou espaço do usuário — com o objetivo de torná-lo visualmente distante do desktop.
Um sistema operacional moderno divide a memória virtual entre o espaço do kernel e o espaço do usuário — com o intuito de proteger os dados e a funcionalidade do sistema contra falhas.
O primeiro espaço é reservado estritamente para executar as operações do kernel, suas extensões e a maioria dos seus drivers.
Do outro lado, o espaço do usuário é onde os aplicativos e alguns dos drivers rodam.
Comumente chamado “userland”, o espaço do usuário se refere a todo código executado fora cerne do sistema operacional.
Em uma lista (bem concisa) as principais alterações introduzidas no kernel GNU/Linux são as seguintes:
- ashmem ou Android Shared Memory — um sistema de compartilhamento de memória baseado em arquivo (file-based).
- Binder, um sistema de comunicação inter-processos (IPC) e sistema de chamada de procedimento remoto.
- logger, um mecanismo de logging de alta velocidade, implantado no núcleo e otimizado para escrita.
- Paranoid networking um mecanismo criado para restringir fluxo de dados na rede a determinados processos.
- pmem — um driver para mapeamento de largas quantidades de memória física no espaço do usuário.
- Viking Killer — em substituição ao OOM Killer. Implementa á lógica do Android de “matar os processos recentes e menos usados” em condições de memória escassa.
- wakelocks — uma solução única do Android para gestão de energia, no qual o estado padrão do dispositivo é o modo sleep. O sistema requer uma ação explícita (através de um wakelock) para sair deste estado.
- Os alarm timers dão suporte ao gestor de alarmes do sistema para avisar ao kernel sobre os agendamentos para “acordar o sistema”, usando um wakelock.
Além destas implementações, citam-se todos os drivers, os recursos para a arquitetura ARM e outras associadas ao código de baixo nível, necessárias para garantir o suporte do Android a ampla variedade de aparelhos.
Conte ainda os drivers acrescentados para o funcionamento do GPS, bluetooth etc em plataformas móveis.
Referência: http://elinux.org/Android_Kernel_Features#List_of_kernel_features_unique_to_Android
O Android Mainlining Project trabalha para incluir as mudanças do Android no kernel GNU/Linux.