Al final de 2019, una reelaboración del código de tubería del kernel de Linux vio parte de su lógica reelaborada para despertar a los lectores solo si es necesario y evitar un posible problema de manada estruendosa. Pero resulta que algunas bibliotecas de Android abusaron de la funcionalidad y esto ha provocado que las aplicaciones de Android se estropeen al pasar a kernels recientes. Si bien el software de espacio de usuario está equivocado, el kernel se apega a su política de no romper el espacio de usuario y, como tal, Linus Torvalds ha cambiado el comportamiento del código para Linux 5.14 y se ha actualizado a kernels estables anteriores.
En lugar de solo despertar a los lectores si es necesario, el cambio combinado en el kernel de Linux el viernes hará que las escrituras de canalización siempre despierten a los lectores. Debido a que algunas bibliotecas de Android, como Realm, hacen un mal uso de la interfaz EPOLL, el cambio de canalización a finales de 2019 terminó rompiendo algunas aplicaciones de Android.
Esto ha roto”numerosas aplicaciones de Android”desde Linux 5.5, pero dado el largo período de tiempo entre las versiones del kernel enviadas por Android, solo se ha convertido en un problema recientemente con la transición de Android a Linux 5.10 LTS. Desde entonces, se ha abordado el comportamiento de Realm, pero tomará algún tiempo antes de que todas las aplicaciones que aprovechan la biblioteca (y cualquier otra biblioteca problemática) se actualicen y reconstruyan, por lo que, por ahora, las aplicaciones de Android rotas todavía están disponibles.
Mientras que el espacio de usuario estaba haciendo un mal uso de una interfaz y eso llevó a que”todas las aplicaciones que usaban esta biblioteca dejaron de funcionar”, el kernel de Linux tiene una política de que si las aplicaciones rompen con el comportamiento/cambios del nuevo kernel, es una regresión. Así, el viernes, Linus Torvalds fue el autor y fusionó este cambio para hacer que las escrituras siempre despierten a los lectores, incluso si son extrañas, con el fin de convivir mejor con el antiguo comportamiento.
Consulte este commit para aquellos interesados en todos los detalles técnicos sobre el problema y la resolución.