Microsoft se encuentra modernizando su sistema operativo | 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.
Cuando los primeros sistemas operativos fueron creados estos fueron escritos en lenguaje binario o lenguaje máquina y estaban 100% diseñados para alguna arquitectura en particular, posteriormente fueron desarrollándose o siendo reescritos algunos de ellos en ensamblador y posteriormente en C o C++ o una combinación de ambos.
Hasta la fecha el lenguaje de programación más usado para programar sistemas operativos es C debido a su eficiencia al momento de manejar recursos y eso lo hace ideal para correr en chips que tal vez no tengan tanta memoria o con alguna otra característica donde la eficiencia es crucial, además de que tiene rutinas de bajo nivel para interactuar con el hardware directamente, es portable entre las principales arquitecturas conocidas y diversas bondades.
Pero nada es perfecto en esta vida y C no es la excepción: uno de los principales problemas son las fugas de memoria y la posibilidad de sobreescribir la memoria en uso.
Fugas de memoria:
Cuando una variable es creada, el sistema operativo asigna memoria ram al programa que la está solicitando y lo correcto sería que al ya no necesitarla le solicitáramos al sistema operativo que liberara los recursos que ya no estamos necesitando, pero, siendo honestos muchas veces a los programadores se nos olvida hacer eso o simplemente no sabíamos que había que hacerlo.
Lenguajes de programación modernos como Java y Visual Basic.Net incluyen rutinas para que automáticamente sean liberados los recursos que ya no están usando, pero no es así en el caso de C, este no incluye ninguna rutina para liberar los recursos que ya no se están usando y después de un rato notaremos que nuestro equipo comienza a ponerse lento u otros problemas si muchas aplicaciones están funcionando y no liberan los recursos que ya no usan.
¿Y porqué el sistema operativo no libera los recursos que ya usan las aplicaciones?, pues porque tampoco puede hacerlo directamente (al menos en parte). Windows, Linux y otros sistemas operativos han sido escritos enteros o en parte en C y este no libera los recursos a menos que se lo indiquemos expresamente (para algunos tipos de variables si lo hace), y si este tiene errores de diseño con el transcurso de las horas de uso vamos a ir notando una caída de rendimiento tanto por los recursos sin liberar del propio sistema operativo como las aplicaciones que tampoco lo hacen.
Sobreescritura de memoria:
Tal vez ya no tan problemática como hasta algunas décadas, pero si es verdad que tanto MS-DOS como las primeras versiones de Windows eran susceptibles a que un programa maliciosamente o por descuido del programador reescribiera datos en memoria ram que estaban siendo usados por otra aplicación o que ocuparan más espacio del asignado originalmente y de nuevo, sobrescribieran datos que necesitaban otros programas con graves problemas de seguridad o corrompiendo el funcionamiento de los mismos.
Y es que C y C++ la evolución de este lenguaje no incluyen rutinas para detectar estos problemas y si el propio sistema operativo tiene errores de diseño que permitan explotar estas vulnerabilidades pues ya podemos hacernos una idea de la problemática a la que nos enfrentaremos.
Microsoft reescribe el kernel de Windows con Rust para resolver estos problemas:
Rust es un lenguaje de programación compilado de propósito general al igual que C y C++ y con una sintaxis similar a estos, el lenguaje está diseñado para tener un acceso seguro a la memoria y no permite punteros nulos o punteros colgantes y otras características que han llevado a C a las famosas fugas de memoria o sobreescritura de datos en la memoria ram sin validación alguna.
Otra característica interesante de este lenguaje es que hace mucho énfasis en el manejo eficiente de la memoria en uso evitando con ello la fuga de memoria y además incluye un recolector de basura o liberado de datos sin uso de forma automática para así garantizar que la memoria que ya no estemos usando se libere.
Debido a estas bondades Rust ha estado en la mira de Microsoft (la Fundación Linux también se ha interesado en Rust para reescribir Linux) para reescribir el kernel o parte estructural de su sistema operativo, pero como dijimos hace un momento "no se reescribirá todo Windows", sino solo algunas partes críticas para mejorar el rendimiento de Windows y es probable que en futuras de su sistema operativo comiencen a llegar utilerías reescritas totalmente en este lenguaje de programación.
Conclusiones:
Siempre es bueno actualizarse y me da gusto que Microsoft no se quede anclada al pasado, ya hemos visto como ha permitido que Linux funcione internamente dentro de Windows 10 y otras acciones que décadas atrás eran impensables, creo que ahora le toca el turno a Rust relevar a C como lenguaje de desarrollo de Windows.
Muchas gracias por visitar este artículo que espero les halla gustado, si es así los invito a dejar sus comentarios al respecto y hasta muy 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.
When the first operating systems were created, they were written in binary language or machine language and were 100% designed for a particular architecture. Later, some of them were developed or rewritten in assembler and later in C or C++ or a combination of both.
To date, the most used programming language for programming operating systems is C due to its efficiency when managing resources and that makes it ideal for running on chips that may not have as much memory or with some other feature where efficiency is crucial. , in addition to having low-level routines to interact with the hardware directly, it is portable among the main known architectures and has various benefits.
But nothing is perfect in this life and C is no exception: one of the main problems is memory leaks and the possibility of overwriting the memory in use.
Memory leaks:
When a variable is created, the operating system assigns ram memory to the program that is requesting it and the correct thing would be that when we no longer need it we would ask the operating system to release the resources that we are no longer needing, but, to be honest, many times the Programmers, we forget to do that or we simply didn't know that we had to do it.
Modern programming languages such as Java and Visual Basic.Net include routines to automatically release resources that are no longer in use, but this is not the case in C, it don't include any routine to release resources that are no longer in use. using and after a while we will notice that our computer begins to get slow or other problems if many applications are running and do not release the resources that they no longer use.
And why doesn't the operating system release the resources that the applications already use? Well, because it can't do it directly either (at least in part). Windows, Linux and other operating systems have been written in whole or in part in C and it don't release resources unless we expressly tell it to do so (for some types of variables it does), and if it has design errors over time of the hours of use we are going to notice a drop in performance both due to the unreleased resources of the operating system itself and the applications that do not do so either.
Memory overwrite:
Maybe not as problematic as it was a few decades ago, but it is true that both MS-DOS and the first versions of Windows were susceptible to a program maliciously or through the programmer's carelessness rewriting data in RAM that was being used by another application. or that they took up more space than originally allocated and again, overwrote data that other programs needed with serious security problems or corrupting their operation.
And the fact is that C and C++, the evolution of this language, do not include routines to detect these problems and if the operating system itself has design errors that allow these vulnerabilities to be exploited, then we can already get an idea of the problems we will face.
Microsoft rewrites the Windows kernel with Rust to solve these problems:
Rust is a general-purpose compiled programming language just like C and C++ and with a syntax similar to these, the language is designed to have safe access to memory and does not allow null pointers or dangling pointers and other features that have led to C to the famous memory leaks or overwriting of data in the ram without any validation.
Another interesting feature of this language is that it places great emphasis on the efficient management of the memory in use, thereby avoiding memory leaks and also includes a garbage collector or freeing unused data automatically to guarantee that the memory that we are no longer using it is released.
Due to these benefits, Rust has been in Microsoft's sights (the Linux Foundation has also been interested in Rust to rewrite Linux) to rewrite the kernel or structural part of its operating system, but as we said a moment ago "not all of Windows will be rewritten", but only some critical parts to improve the performance of Windows and it is likely that in future versions of its operating system utilities will begin to arrive completely rewritten in this programming language.
Conclusions:
It's always good to update and I am glad that Microsoft is not stuck in the past, we have already seen how it has allowed Linux to work internally within Windows 10 and other actions that decades ago were unthinkable, I think now it is Rust's turn to take over to C as a Windows development language.
Thank you very much for visiting this article, I hope you liked it. If so, I invite you to leave your comments about it and see you very soon.