La primera versión de Bitcoin se programó en C++.
La última actualización de Bitcoin Core incorpora los lenguajes Python y C.
Solo un reducido grupo de especialistas en criptografÃa advirtió la importancia del documento suscrito por Satoshi Nakamoto, enviado a finales de noviembre de 2008 a una lista de correo. Esa publicación, conocida hoy como el Libro Blanco de Bitcoin, define los elementos básicos de la red descentralizada que permitirÃa el intercambio de bitcoin entre pares, sin censura ni intervención de terceros de confianza.
CriptoNoticias conversó con Francisco Calderón, Gerente de TecnologÃa de Graaf.One, una empresa de brokerage de Bitcoin, quien además de desarrollador, es hacktivista, y evangelista de Lightning Network.
C++ es una evolución de C. Es un lenguaje muy importante y útil para proyectos como Bitcoin, que requieren un alto rendimiento. Al respecto, C++ tiene acceso a recursos del computador que otros lenguajes, más actuales y de más alto nivel, no tienen. Antes de Bitcoin, el lenguaje C fue usado para crear sistemas operativos como Unix y Linux, justamente porque aprovecha al máximo los recursos del hardware.
Francisco Calderón. Gerente de TecnologÃa de Graaf.One
Francisco Calderón, afirma que C++ es el lenguaje de nivel más bajo con respecto a otros lenguajes, sin embargo, es muy poderoso y de rápida ejecución. Fuente: En-Consenso/CriptoNoticias
Cuando afirma que C++ es de más bajo nivel que otros lenguajes, Calderón se refiere a que está más próximo a la arquitectura de hardware, mientras que los lenguajes de alto nivel están más cercanos a los programadores y usuarios. Esto se traduce en instrucciones más comprensibles y cercanas al lenguaje natural, aunque los lenguajes son menos eficientes desde el punto de vista del rendimiento de los programas.
Este acceso mayor a los recursos del computador, dice Calderón, hace de C++ un lenguaje muy poderoso y de rápida ejecución. Sin embargo, sostiene, tiene una curva de aprendizaje más larga que otros lenguajes de alto nivel.
Como consecuencia de su poder como lenguaje, los programadores de C++ deben ser muy cuidadosos, señala Calderón. Asà como es altamente eficiente en la ejecución, C++ no tiene mecanismos nativos para prevenir errores, dice el desarrollador.
Evolución en los lenguajes
Con más de once años de evolución, en el proceso de mantenimiento de Bitcoin Core, se sigue usando C++ de manera predominante. En el repositorio de Bitcoin en GitHub, se colocó el 3 de junio pasado la última actualización de Bitcoin Core, la versión 0.20.0, de la cual se señala que entre los lenguajes de programación usados están C++ (68,7%), Python (18%), C (7,2%) y 6,1% de otros lenguajes.
Se aprecia que C++ sigue siendo el lenguaje dominante en la operación de Bitcoin Core. Sin embargo, Calderón señala que han ido surgiendo lenguajes de alto nivel, con capacidad para desarrollar proyectos al nivel del protocolo de Bitcoin, que resuelven las limitaciones de C++.
Francisco Calderón. Gerente de TecnologÃa de Graaf.One
Como ejemplo de la utilización de Go, Calderón cita el caso de Lightning Labs que usa Go en el desarrollo del cliente lnd de Lightning Network. En este caso, sin embargo, hay una ventaja de C++ respecto a su rival más moderno «Blockstream realizó una implementación de un cliente de Lightning Network en C++ que supera en rendimiento a lnd», dice Calderón.
De cara al futuro, Calderón se declara partidario de Rust como alternativa para tener una ejecución eficiente y que facilita el proceso de desarrollo. «He estudiado Go y mi decisión actual es lograr el dominio de Rust, ya que el código generado por Rust tiene mayor rendimiento que el código generado por Go», dice el desarrollador.
Jean P. Dudey, menciona que los proyectos Bitcoin que utilizan C++ tienen más control del entorno donde se ejecuta. Fuente: jeandudey/github.com
Uso de lenguajes de programación en un proyecto especÃfico
Dudey coincidió con Calderón en que proyectos como Bitcoin utilizan C++ porque tiene más control del entorno donde se ejecuta. «Otros lenguajes de más alto nivel (Python, Go, Javascript, etc.) mayormente se utilizan para aplicaciones relacionadas con Bitcoin en materia de interfaz de usuario para carteras, por ejemplo, y no para los nodos», dice Jean Pierre Dudey
¿Cómo abordaron la escogencia del lenguaje o lenguajes a usar en el Proyecto Locha?
En Locha, para el firmware de los dispositivos utilizamos el lenguaje C, debido a que es el lenguaje por defecto a utilizar en los sistemas embebidos, debido a la rapidez y a que cuenta con mayor soporte. Otros lenguajes tienen fallas principalmente en el punto de soporte, y en el firmware de Locha se trata de ser lo más portable posible para correr en diferentes piezas de hardware.
Desafortunadamente, no es posible realizar dicha revisión pues, salvo pocas excepciones, hay obstáculos para acceder al código. Es decir, en el caso de las carteras de Bitcoin y de aquellas que son multimoneda, la gran mayorÃa, o usan código propietario, o el código no está accesible.
Sólo seis de las carteras examinadas por Walletscrutiny tienen un código «reproducible». Es decir, si se toma el programa fuente que aparece en el repositorio de la cartera en GitHub y se compila, el programa ejecutable resultante se comporta de forma consistente con la versión respectiva que ofrece el desarrollador.
Las carteras con código reproducible (indicamos los lenguaje de programación usados), según Walletscrutiny, son: Bitcoin Wallet (Java 100%), Mycelium (Java 81%, Kotlin 19%), Green (Java 99,6%), ABCore (Java 99,4%), Unstoppable (Kotlin 99,6% y Ruby 0,4%) y AirGap Vault. Esta última ha sido programada con TypeScript (70,9%), Swift (8,2%), Kotlin (6,5%) y otros lenguajes.
Java está presente en cuatro de seis proyectos y Kotlin, un lenguaje dedicado a las aplicaciones nativas de Android, tiene participación variable en tres de los proyectos.
A pesar de que siempre existirán vÃas hacia la especialización en un determinado lenguaje de programación, Wandersleb cree que un programador debe conocer varios lenguajes. Respecto a Rust, dice que no está familiarizado aún con ese lenguaje.
Si fuese necesario, estoy seguro de que un desarrollador requerirÃa unos dÃas de estudio y práctica para llegar a un punto en el que puede hacer una contribución significativa a un proyecto de Rust. Los desarrolladores que nieguen esto, probablemente no han profundizado aún en algún lenguaje.
Leo Wandersleb, desarrollador lÃder de la cartera de Bitcoin Mycellium Android.
M.Sc. en Sistemas Digitales. Divulgador de temas de TI desde 1986 y convencido del gran potencial de Bitcoin. Involucrado con las criptomonedas desde 2017.
SuscrÃbete a los boletines de CriptoNoticias
Mantente informado de los últimos acontecimientos del mundo de las  criptomonedas.