Hechos clave:
-
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.
Quien se identificaba como Satoshi Nakamoto tambiĆ©n habĆa asumido el proyecto de llevar a la prĆ”ctica la implementaciĆ³n de la red Bitcoin. En el momento de la publicaciĆ³n del Libro Blanco, ya existĆa una versiĆ³n preliminar del software de Bitcoin, hoy conocido como Bitcoin Core, pues dos meses despuĆ©s fue minado el bloque GĆ©nesis, el 3 de enero de 2009.Ā Esa primera versiĆ³n de Bitcoin fue escrita por Nakamoto en el lenguaje C++.
Para abordar el tĆ³pico de los lenguajes de programaciĆ³n usados tanto para el protocolo de Bitcoin, como para los diferentes proyectos que hoy funcionan en esa red, CriptoNoticias contactĆ³ a varios desarrolladores para identificar los principales lenguajes que se usan en la actualidad y quĆ© tendencias de evoluciĆ³n hay en ese campo en el futuro inmediato.
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.
ĀæPor quĆ© crees que Satoshi Nakamoto escogiĆ³ C++ para implementar el primer cliente de Bitcoin?
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
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++.
Estos lenguajes, como Go, que fue desarrollado por Google; o Rust, desarrollado por Mozilla, tienen una curva de aprendizaje mucho mĆ”s corta que C++. TambiĆ©n tienen la ventaja de que incluyen en su diseƱo controles para prevenir errores de programaciĆ³n. Se podrĆa decir que ademĆ”s de ser mĆ”s fĆ”ciles de dominar, estos lenguajes cuidan al desarrollador de cometer errores.
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.
Uso de lenguajes de programaciĆ³n en un proyecto especĆfico
Jean Pierre Dudey, del proyecto Locha, una red de malla planificada para transmitir mensajes, servicios y transacciones de Bitcoin fuera de lĆnea, tambiĆ©n conversĆ³ con CriptoNoticias sobre los lenguajes de programaciĆ³n usados en proyectos asociados a Bitcoin.
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.
Jean Pierre Dudey, desarrollador en Locha Mesh.
Dudey se refiere al dispositivo denominado Turpial, a travĆ©s del cual se envĆan los mensajes a la red de malla y las transacciones de Bitcoin. Recientemente, el proyecto anunciĆ³ que tambiĆ©n incluirĆ” el envĆo y recepciĆ³n de transacciones de Monero.
Para la aplicaciĆ³n mĆ³vil, seƱala Dudey, se utilizan diferentes lenguajes de programaciĆ³n dependiendo de lo que se requiera en tĆ©rminos de portabilidad entre iOS y Android. Por eso, dice, se suele usar una mezcla de Javascript, Java, y Swift, entre otros.
En cuanto a lenguajes emergentes, con capacidad para igualar en capacidad a C o C++, Dudey afirma: Ā«Rust como lenguaje promete, es el siguiente paso en lenguajes de sistemas compilados como C y C++Ā». Este lenguaje, dice Dudey, provee muchas caracterĆsticas de seguridad para evitar fallos que comĆŗnmente suceden en otros lenguajes en tĆ©rmino del manejo de la memoria. Ā«Promete tambiĆ©n en rendimiento; en muchos benchmarks, Rust supera a C y C++ en algunos casosĀ».
No confĆes, verifica
CriptoNoticias tambiĆ©n contactĆ³ a Leo Wandersleb, fundador de Wallet Scrutiny y desarrollador lĆder de la cartera de Bitcoin Mycellium. Walletscrituny.com es un sitio web que realiza una revisiĆ³n de las carteras desde el punto de vista de seguridad, partiendo de una posiciĆ³n escĆ©ptica: Āæhay algĆŗn indicio en el cĆ³digo de las carteras de que unos desarrolladores deshonestos puedan robar todos los BTC de sus usuarios?
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.
Para dispositivos Android, Java y Kotlin son populares para el desarrollo de carteras de Bitcoin y otros proyectos, pero considerando los dispositivos Apple, JavaScript es tambiĆ©n usado. Rust no estĆ” concebido para aplicaciones mĆ³viles pero pienso que al final, siempre hay entusiastas de cualquier lenguaje que van a programar una cartera de Bitcoin en ese lenguaje.
Leo Wandersleb, desarrollador lĆder de la cartera de Bitcoin Mycellium Android.
Efectivamente, cuando se examinan los proyectos de carteras de Bitcoin en GitHub hay para todos los gustos.Ā Tomando los 30 proyectos mejor calificados, Java y JavaScript figuran en 9 y 5 proyectos respectivamente, lo que representa 47% del total. TambiĆ©n aparecen lenguajes como Go (13%), Objective C (10%), Swift (7%) y otros (23%).
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.
Es previsible que en lo que se refiere al protocolo de Bitcoin, C++ siga coexistiendo con otros lenguajes que compensen sus aspectos mĆ”s dĆ©biles, aunque hasta ahora esta venerable herramienta es responsable por mĆ”s de dos tercios del cĆ³digo ejecutable de Bitcoin Core.