Reescribiendo el núcleo de Linux en Rust / Rewriting the Linux kernel in Rust

By marjuanm | msproys | 20 Nov 2023


Linux

Linux no deja de evolucionar | cortesía de Pixabay.

  Hola que tal a todos, muchas gracias de antemano por sus visitas a este blog, en esta ocasión traemos un artículo que espero sea de su completo interés.

  Algún tiempo atrás escribí un artículo acerca de que Microsoft se encuentra reescribiendo partes de su sistema operativo (Windows) en el lenguaje Rust, esto tendrá como ventaja evitar problemas de fugas de memoria, sobreescrituras de la misma como ya se mencionó en el artículo previo, pues este lenguaje es mucho más estricto y resuelve muchos problemas relacionados con estas situaciones, y a su vez mejorar el desempeño de Windows.

  Linux tampoco se ha quedado atrás y se encuentra actualmente reescribiendo partes del mismo en este lenguaje, "¿porqué no reescriben todo una vez?", pues porque no es tan sencillo como parece, Linux tiene actualmente casi 15,000,000 de líneas de código y cualquier cambio que no esté bien revisado puede llevar a un desastre, así van a ir de poco en poco.

  Sin embargo también hay otros problemas que se tienen que resolver primero, aclaro que me he basado en el artículo de Muy Linux para documentarme y esperando presentar la información lo mejor posible para todos ustedes.

Algunos problemas al portar el código de Linux desde C a Rust:

  Cambiar de una plataforma a otra nunca es sencillo, siempre hay problemas de compatibilidad, cosas que dejan de funcionar, etc, lo vemos tan solo al actualizar nuestro sistema operativo o alguna otra aplicación. Cada nueva versión de Windows lanzada ha enfrentado oposición por cambios introducidos que no han sido del agrado de todos, aplicaciones que no funcionan bien, nuevas políticas de seguridad que a nadie convencieron, etc.

  Pues con la migración de un sistema programado en un lenguaje  a otro es lo mismo, no siempre es tan sencillo portar alguna rutina porque el lenguaje trabaja diferente y tenemos que hacer muchas cosas para emular lo que ya hacía en el otro lenguaje, y precisamente con algunas de estas situaciones se han topado al portar partes de Linux a Rust.

Versiones LTS de Linux:

  Cada tantos meses distribuciones Linux como Ubuntu liberan versiones actualizadas de su sistema operativo, estas nuevas versiones incluyen mejoras diversas, corrección de errores y claro, nuevas características; pero estas nuevas versiones de Ubuntu o de otras distribuciones incluyen características que a veces podrían "ser algo experimentales" y con el paso de los meses se van mejorando si presentan problemas.

  Sin embargo como mencionaba en otro artículo, los sistemas operativos tipo Unix se utilizan principalmente en servidores web o servidores de alto desempeño, por lo que no es buena idea estarlos actualizando con características "experimentales" o no lo suficientemente probadas. Por esta razón Ubuntu y otras distribuciones Linux reservan algunas versiones que no van a cambiar en mucho tiempo para así asegurar la estabilidad, estas versiones se prueban a fondo y recibirán soporte técnico por mucho más tiempo que las versiones ordinarias y en general ofrecen mucha mejor estabilidad al dejar solo aquello que está probado que funciona (se van actualizando por supuesto, pero estas actualizaciones son para reforzar la distribución, no para introducir nuevas características).

  Reciben el nombre de LTS (Long Term Support - Soporte a Largo Plazo) y como su nombre lo dice, son distribuciones que obtendrán actualizaciones de funciones (en algunos casos), seguridad y mantenimiento durante un período más prolongado que las distribuciones ordinarias; pero a cambio podrían quedarse desfasadas con los años con respecto a las nuevas distribuciones lanzadas, quizás no soporten hardware o software nuevo en pro de la estabilidad.

  El detalle es que todas estas mejoras de Rust difícilmente se podrían llevar a las distribuciones LTS porque como dijimos solo reciben actualizaciones de seguridad y de estabilidad, no de características nuevas, por lo que podrían pasar muchos años desde que se lance este nuevo kernel con partes en Rust hasta que llegue a dichas distribuciones.

Drivers escritos en C:

  Tanto Windows como Linux están escritos en C con porciones de C++ y ensamblador, pero el funcionamiento interno de ambos es muy diferente: mientras que en Windows los drivers (las piezas de software que sirven de puente entre el sistema operativo y el hardware) son básicamente programas ejecutables colaborando con Windows, en Linux estos pueden cargarse con un modelo similar a como lo hace Windows pero también muchos de ellos son parte de Linux.

  "¿Y cuál es el problema?", pues que estos "drivers nativos" están escritos en C con fragmentos de otros lenguajes como ensamblador y no son tan sencillos en ocasiones de ser portados a Rust, por lo que los desarrolladores deben trabajar con mucho cuidado y hacer muchísimas pruebas antes de reemplazar el código que ya lleva años funcionando por su versión en Rust y asegurarse que esta integración funcione sin problemas.

Demasiado tiempo y demasiado trabajo:

  No es nada sencillo pasar tu trabajo de una plataforma a otra, en el caso de Linux como mencionamos al inicio son millones y millones de líneas de código que no pueden ser llevadas así como así a otro lenguaje de programación, además de otros problemas como ya se comentaron. Pero no es el único sistema operativo que ha sido portado a otro entorno diferente al de su desarrollo original.

  Unix de quien ya hemos hablado en este blog fue escrito originalmente en lenguaje ensamblador (1969) y años más tarde (1972) fue reescrito en lenguaje C, esto trajo como ventaja que el sistema operativo pudiera correr en otras arquitecturas diferentes para las que había sido diseñado originalmente, el código se volvió más compacto y legible y gracias a esto llegó a más objetivos. Sin lugar a dudas la migración a Rust por parte de Linux va a traer beneficios con el tiempo, pero tal vez pasen muchos años antes de que veamos dichos beneficios. Desconozco si en Windows se hallan encontrado con problemas similares pues se trata de sistemas operativos diferentes, así que habrá que esperar para ver que sucede y esperamos todo sea para mejorar.

Conclusiones:

  Toda tecnología debe evolucionar para mejorar y no morir con el paso del tiempo o por la llegada de nuevas alternativas, en el caso de Linux ha ido evolucionando con el paso de los años y gracias a ello está presente en tantos equipos como dispositivos que pocas veces nos imaginamos que funcionan con Linux, así que cualquier mejora es bienvenida.

  Muchas gracias por su tiempo para leer este artículo, espero halla sido de su agrado e interés; si gustan dejar un comentario o apoyar con alguna propina se los agradeceré infinitamente. Hasta pronto.


  Hello everyone, thank you very much in advance for your visits to this blog, on this occasion we bring you an article that I hope will be of complete interest to you.

  Some time ago I wrote an article about how Microsoft is rewriting parts of its operating system (Windows) in the Rust language, this will have the advantage of avoiding problems of memory leaks, overwriting of the same as already mentioned in the previous article, Well, this language is much stricter and solves many problems related to these situations, and in turn improves the performance of Windows.

  Linux has not been left behind either and is currently rewriting parts of it in this language, "why don't you rewrite everything once?" Well, because not is as simple as it seems, Linux currently has almost 15,000,000 lines of code and any changes That it is not well reviewed can lead to a disaster, so they will go little by little.

  However, there are also other problems that have to be resolved first, I clarify that I have based myself on the Muy Linux article to document myself and hoping to present the information as best as possible for all of you.

Some problems when porting Linux code from C to Rust:

  Changing from one platform to another is never easy, there are always compatibility problems, things that stop working, etc. We only see this when updating our operating system or some other application. Each new version of Windows released has faced opposition due to changes introduced that have not been to everyone's liking, applications that do not work well, new security policies that no one convinced, etc.

  Well, with the migration of a system programmed in one language to another it is the same, it is not always so easy to carry a routine because the language works differently and we have to do many things to emulate what it already did in the other language, and precisely with Some of these situations have been encountered when porting parts of Linux to Rust.

Linux LTS versions:

  Every few months Linux distributions such as Ubuntu release updated versions of their operating system, these new versions include various improvements, error corrections and of course, new features; but these new versions of Ubuntu or other distributions include features that sometimes could "be somewhat experimental" and over the months they are improved if they present problems.

  However, as I mentioned in another article, Unix-type operating systems are mainly used in web servers or high-performance servers, so not is a good idea to update them with "experimental" or not sufficiently tested features. For this reason Ubuntu and other Linux distributions reserve some versions that will not change for a long time to ensure stability, these versions are thoroughly tested and will receive technical support for much longer than ordinary versions and in general offer much better stability by leaving only what is proven to work (they are updated of course, but these updates are to strengthen the distribution, not to introduce new features).

  They are called LTS (Long Term Support) and as their name says, they are distributions that will get feature updates (in some cases), security and maintenance for a longer period than ordinary distributions; but in exchange they could become outdated over the years with respect to the new distributions released, they may not support new hardware or software for the sake of stability.

  The detail is that all these Rust improvements could hardly be brought to LTS distributions because, as we said, they only receive security and stability updates, not new features, so it could take many years for this new kernel to be released with parts. in Rust until I reach those distributions.

Drivers written in C:

  Both Windows and Linux are written in C with portions of C++ and assembler, but the internal workings of both are very different: while in Windows the drivers (the pieces of software that serve as a bridge between the operating system and the hardware) are basically executable programs collaborating with Windows,  in Linux these can be loaded with a model similar to how Windows does, but many of them are also part of Linux.

  "And what's the problem?", since these "native drivers" are written in C with fragments of other languages ​​such as assembly and are sometimes not so easy to be ported to Rust, so developers must work very hard. Be careful and do a lot of testing before replacing the code that has been working for years with its version in Rust and ensure that this integration works without problems.

Too much time and too much work:

  Not is easy to transfer your work from one platform to another, in the case of Linux, as we mentioned at the beginning, there are millions and millions of lines of code that cannot be transferred just like that to another programming language, in addition to other problems as already mentioned. were commented. But it is not the only operating system that has been ported to another environment different from its original development.

  Unix, which we have already talked about in this blog, was originally written in assembly language (1969) and years later (1972) it was rewritten in C language, this brought the advantage that the operating system could run on other architectures different from those for which it had been designed. originally designed, the code became more compact and readable and thanks to this it reached more targets. Without a doubt, the migration to Rust by Linux will bring benefits over time, but it may be many years before we see these benefits. I don't know if they have encountered similar problems in Windows since they are different operating systems, so we will have to wait to see what happens and we hope everything improves.

Conclusions:

  Every technology must evolve to improve and not die with the passage of time or due to the arrival of new alternatives. In the case of Linux, it has evolved over the years and thanks to this it is present in so many computers and devices that are rarely seen. We imagine they work with Linux, so any improvements are welcome.

  Thank you very much for your time to read this article, I hope you found it to your liking and interest; If you like to leave a comment or support with a tip, I will be infinitely grateful. See you soon.

 

How do you rate this article?

3


marjuanm
marjuanm

I'm a VB.NET Programmer, but too programming on PHP, greetings.


msproys
msproys

Blog informático para dar a conocer mis proyectos, soy desarrollador de sistemas y partidario del software libre. Por medio de este blog estaré dando a conocer algunos de mis trabajos, así como publicando diversos códigos fuentes útiles.

Send a $0.01 microtip in crypto to the author, and earn yourself as you read!

20% to author / 80% to me.
We pay the tips from our rewards pool.