La Casa Blanca no quiere al lenguaje C/C++ | cortesía de Genbeta.
Hola a todos sean bienvenidos a este nuevo artículo que espero les sea de utilidad a todos ustedes. Sí, como mencioné en artículos anteriores ando desconectado de la redacción de este blog desde hace algunas semanas y algunas notas quizá no sean tan actuales.
Por esa razón decidí este artículo publicarlo no como una noticia, sino como un artículo de opinión ya que también soy programador de sistemas y precisamente mi primer lenguaje de programación fue "C". Como vemos en el título se expone que la Casa Blanca pide (concretamente a la industria dejar de usar los lenguajes C y C++ y pasarse a algo más moderno como Rust u otros.
Se respeta las opiniones ajenas y seguramente la capital de USA tendrá sus motivos (buenos o malos, no lo se) para pedir esto, pero, "¿son ellos programadores?", no, tampoco tienen a las instituciones de seguridad informática más éticas a su servicio (recordemos el escándalo de la NSA en 2013 por espiar a diestra y siniestra aprovechando proveedores de servicios de Internet populares). Así que esta petición "podría" tener cierto sesgo en favor de Estados Unidos, opino yo, claro está.
¿Y cuál es el problema con C/C++?
Hace algún tiempo atrás escribí un artículo sobre el lenguaje Rust y como este está comenzando a ser usado para reescribir partes de Windows y Linux; y es que, cuando fueron creados C y C++ algún tiempo después los lenguajes de programación de aquel entonces eran Ensamblador y lenguaje máquina, poco intuitivos con el programador y que permitían control total del equipo. C y C++ fueron básicamente maneras más elegantes de abordar la programación de las computadoras pero evitando la complejidad de los lenguajes Ensamblador y binario o máquina, la seguridad quedaba un poco de lado y lo único que se quería era una manera sencilla de programar los equipos de cómputo.
Por este motivo tanto C como C++ implementan maneras poco seguras de acceder a la memoria ram del equipo, esto lleva a que sea posible sobreescribir partes que están siendo usadas por otros programas y a la caída de servicios elementales del sistema operativo dejándolo vulnerable (léase artículo desbordamiento de buffer en Wikipedia, recurso tan usado por virus informáticos en los años 80's y 90's). Otro problema informático típico de C/C++ es que el usuario debe liberar manualmente los recursos no usados y algo que casi siempre se olvida, sea por descuido o por ignorancia, y, que con el paso de las horas o días del equipo encendido lleve a que se vayan mermando sus recursos disponibles no habiendo más remedio que tener que reiniciar la computadora.
Rust por otra parte toma las mejores prácticas de otros lenguajes de programación (como Java) de liberar la memoria y otros recursos tan pronto dejan de usarse y así evitar la fuja de memoria, también provee métodos más seguros para el manejo de la misma y en general busca ser una opción a C/C++ que está siendo tomada en cuenta para reescribir partes de Windows y Linux en beneficio de la seguridad y el desempeño de los mismos.
¿Es viable dejar de usar "ya" C/C++?
Claro, Rust y otros lenguajes modernos no son perfectos, y aunque ya están siendo usados para reemplazar a C y C++ todavía podría pasar años antes de que de verdad reemplacen a estos lenguajes como los estándares de programación en las empresas. De hecho Google comentó al respecto:
No vemos la posibilidad de una hoja de ruta realista para que C++ pueda evolucionar hacia un lenguaje con rigurosas garantías de seguridad de memoria.
Osea que no hay posibilidades de mejorar a C++ (y menos C) en el corto plazo y que sea lanzada una versión mucho mejor que resuelva estos problemas (probablemente se rompería la compatibilidad con sistemas ya existentes o quedaría limitado a equipos recientes), la única posibilidad es migrar a otros lenguajes que no tengan esta problemática, de nuevo cito a Google (se anexa este artículo al final del mismo en la sección de recursos):
Como consecuencia, estamos considerando llevar a cabo una transición gradual hacia lenguajes "seguros para la memoria" como Java, Go y Rust.
¿Por qué sigue usándose C/C++ si son pocos seguros?
Como mencionamos al inicio este par de lenguajes fueron creados cuando había pocas opciones de lenguajes de programación en la industria, sí, es verdad que estaba BASIC, Pascal y otros, pero estos no fueron creados para manejar todos los recursos de la computadora como si era posible con Ensamblador, y para el desarrollo de sistemas operativos esto es fundamental.
Gracias a C y su creciente migración a diferentes plataformas fue posible la portabilidad de programas, antes de eso si escribíamos un programa en Ensamblador quedaba ligado a la arquitectura de la computadora donde lo habíamos desarrollado; con C no había ese problema pues el lenguaje era el mismo para una arquitectura de computadoras u otra, lo único que se necesitaba era que el compilador fuera compatible con esa arquitectura y listo (recordemos que en aquel entonces el papel del sistema operativo era mínimo y el software accedía directamente al hardware, algo "prohibido" hoy en día - al menos en parte. La seguridad en aquel entonces no era prioridad, se busca algo práctico y nada más.
¿Y que tiene que ver la Casa Blanca en todo esto?
Aparentemente poco, pero como mencionamos al inicio la NSA está detrás de toda vigilancia norteamericana y a ellos no les conviene que los sistemas que ellos mismos usan no sean seguros (por estar escritos en C o C++) y que alguien más los pueda espiar. Osea es político el asunto más allá de estar de verdad preocupados por la seguridad en informática en general, queremos nuestros sistemas seguros a prioridad (que no es posible por el momento) pero a la vez esperan que los sistemas de los contrincantes no lo sean (ellos mismos conocen vulnerabilidades de sistemas informáticos, pero lejos de darlas a conocer las usan para vigilar a otros). Un caso de doble moral sin lugar a dudas.
Conclusiones:
Sin lugar a dudas C/C++ fueron excelentes opciones en el pasado para desarrollar software, pero hoy en día ya se sienten "algo obsoletos" con las nuevas necesidades, por ese motivo están siendo portadas partes de sistemas operativos a Rust, otros programas podrían ya estar siendo portados a otros lenguajes modernos, pero no se va a hacer esto de la noche a la mañana. "¿Qué les ha parecido este artículo?", por favor dejen sus comentarios al respecto, compartan este en sus redes sociales y solo resta agradecerles por su tiempo, un saludo de antemano.
Hello everyone, welcome to this new article that I hope will be useful to all of you. Yes, as I mentioned in previous articles, I have been disconnected from writing this blog for a few weeks and some notes may not be so current.
For that reason I decided to publish this article not as news, but as an opinion article since I am also a systems programmer and my first programming language was "C". As we see in the title, it's stated that the White House asks (specifically) the industry to stop using the C and C++ languages and move to something more modern like Rust or others.
The opinions of others are respected and surely the capital of the USA will have its reasons (good or bad, I don't know) for asking this, but, "are they programmers?", no, they don't have the most ethical computer security institutions to support them either (remember the NSA scandal in 2013 for spying left and right by taking advantage of popular Internet service providers). So this request "could" have a certain bias in favor of the United States, in my opinion, of course.
And what's the problem with C/C++?
Some time ago I wrote an article about the Rust language and how it is beginning to be used to rewrite parts of Windows and Linux; And when C and C++ were created some time later, the programming languages at that time were Assembler and machine language, which were not very intuitive for the programmer and allowed full control of the equipment. C and C++ were basically more elegant ways of approaching computer programming but avoiding the complexity of Assembly and Binary or Machine languages, security was left a bit aside and the only thing that was wanted was a simple way to program computer equipment. calculation.
For this reason, both C and C++ implement unsafe ways of accessing the computer's RAM, this leads to the possibility of overwriting parts that are being used by other programs and to the failure of basic services of the operating system, leaving it vulnerable (read overflow article buffer in Wikipedia, a resource widely used by computer viruses in the 80's and 90's). Another typical computer problem of C/C++ is that the user must manually release unused resources and something that is almost always forgotten, either due to carelessness or ignorance, and that, as the hours or days of the computer is turned on, leads to that its available resources are depleted, with no choice but to restart the computer.
Rust, on the other hand, takes the best practices of other programming languages (such as Java) of freeing memory and other resources as soon as they are no longer used and thus avoiding memory leaks, it also provides safer methods for managing it and in It generally seeks to be an option to C/C++ that is being taken into account to rewrite parts of Windows and Linux to benefit their security and performance.
Is feasible to stop using C/C++ "now"?
Of course, Rust and other modern languages are not perfect, and although they are already being used to replace C and C++ it could still be years before they truly replace these languages as the programming standards in enterprises. In fact Google commented on this:
We don't see the possibility of a realistic roadmap for C++ to evolve into a language with rigorous memory safety guarantees.
In other words, there is no possibility of improving C++ (and even less C) in the short term and for a much better version to be released that solves these problems (compatibility with existing systems would probably be broken or it would be limited to recent equipment), the only The possibility is to migrate to other languages that do not have this problem, again I quote Google (this article is attached at the end of it in the resources section):
As a result, we are considering a gradual transition to "memory-safe" languages such as Java, Go, and Rust.
Why is C/C++ still being used if they are not very safe?
As we mentioned at the beginning, these pair of languages were created when there were few programming language options in the industry, yes, it is true that there was BASIC, Pascal and others, but these were not created to manage all the computer resources as if it were possible with Assembler, and for the development of operating systems this is essential.
Thanks to C and its growing migration to different platforms, the portability of programs was possible. Before that, if we wrote a program in Assembler, it was linked to the architecture of the computer where we had developed it; with C there was no such problem because the language was the same for one computer architecture or another, the only thing that was needed was for the compiler to be compatible with that architecture and that was it (remember that at that time the role of the operating system was minimal and The software directly accessed the hardware, something "forbidden" today - at least in part. Security back then was not a priority, they were looking for something practical and nothing more.
And what does the White House have to do with all this?
Apparently little, but as we mentioned at the beginning, the NSA is behind all North American surveillance and it is not in their interest that the systems they themselves use are not secure (because they are written in C or C++) and that someone else can spy on them. I mean, the issue is political beyond being really concerned about computer security in general, we want our systems to be secure as a priority (which is not possible at the moment) but at the same time we hope that the systems of our opponents are not ( They themselves know about vulnerabilities in computer systems, but far from making them known, they use them to monitor others). A case of double standards without a doubt.
Conclusions:
Without a doubt C/C++ were excellent options in the past for developing software, but today they already feel "somewhat obsolete" with the new needs, for this reason parts of operating systems are being ported to Rust, other programs could already be being ported to other modern languages, but this is not going to be done overnight. "What did you think of this article?" Please leave your comments about it, share it on your social networks and all that remains is to thank you for your time, greetings in advance.