2 puntos por GN⁺ 2024-03-06 | 1 comentarios | Compartir por WhatsApp
  • Radicle Heartwood es la tercera implementación de Radicle Protocol y ofrece una pila de colaboración y publicación de código peer-to-peer sin forjas de código centralizadas
  • El repositorio incluye la herramienta de línea de comandos rad, usada directamente por desarrolladores, y el demonio de red radicle-node
  • Está diseñado para reemplazar forjas de código como GitHub y GitLab, con seguridad y descentralización, además de la preservación de la soberanía del usuario, como objetivos centrales
  • El entorno de instalación requiere Linux o un sistema operativo tipo Unix, Git 2.34 o superior y OpenSSH 9.1 o superior con ssh-agent
  • Admite instalación mediante binarios y desde código fuente en Rust, pero los correos de feedback se publican automáticamente en un canal público de Zulip, por lo que el nombre y la dirección de correo pueden quedar expuestos

Qué ofrece Radicle Heartwood

  • Heartwood es la tercera iteración de Radicle Protocol y una pila completa para colaboración y publicación de código peer-to-peer
  • El repositorio incluye los componentes principales necesarios para implementar Heartwood
    • rad: una interfaz de línea de comandos fácil de usar
    • radicle-node: el demonio de red
  • Radicle está diseñado como una alternativa a forjas de código como GitHub y GitLab
    • Su objetivo es preservar la seguridad, la descentralización, y la soberanía y libertad del usuario
  • La información general está disponible en la Radicle home page
  • Las conversaciones del proyecto se pueden realizar en el Zulip chat
  • El funcionamiento de Radicle está detallado en la Protocol Guide

Instalación y ejecución

  • Los requisitos de instalación son los siguientes
    • Linux o un sistema operativo basado en Unix
    • Git 2.34 o superior

      • OpenSSH 9.1 o superior con ssh-agent
      • Para la instalación mediante binarios se necesitan curl y tar; la versión más reciente se instala con el siguiente comando
curl -sSf https://radicle.dev/install | sh
- Los binarios también se pueden obtener en la página de [download](https://radicle.dev/download)
- Para instalar desde el código fuente se necesita el **toolchain de Rust**; dentro del repositorio, ejecuta los siguientes comandos
cargo install --path crates/radicle-cli --force --locked --root ~/.radicle
cargo install --path crates/radicle-node --force --locked --root ~/.radicle
cargo install --path crates/radicle-remote-helper --force --locked --root ~/.radicle
- También se puede instalar directamente desde un seed node
cargo install --force --locked --root ~/.radicle \
    --git https://seed.radicle.dev/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
    crates/radicle-cli crates/radicle-node crates/radicle-remote-helper
- El archivo de **systemd unit** para el nodo está en la carpeta `/systemd` y puede usarse como punto de partida para personalizaciones adicionales
- Para ejecutar en modo de depuración, consulta [HACKING.md](https://radicle.network/nodes/iris.radicle.network/rad%3Az3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/HACKING.md)

Feedback, contribuciones y licencia

  • El feedback puede enviarse mediante rad issue, Zulip o feedback@radicle.dev
  • El feedback enviado por correo electrónico se publica automáticamente en el canal público #feedback de Zulip
    • Durante la publicación, se expone el encabezado From, que generalmente incluye el nombre y la dirección de correo electrónico
  • Las guías para contribuir están en CONTRIBUTING.md y HACKING.md
  • Radicle se distribuye bajo los términos de la licencia MIT y la Apache License 2.0
  • Los detalles están en LICENSE-APACHE y LICENSE-MIT

1 comentarios

 
GN⁺ 2024-03-06
Opiniones de Hacker News
  • Soy cofundador de Radicle. Si te interesa saber cómo funciona el protocolo por dentro, conviene empezar por la documentación: https://docs.radicle.xyz/
    La documentación todavía está en proceso

    • Al leer la documentación, me llamó la atención la parte que dice que “los repositorios de Radicle pueden ser públicos o privados, y pueden contener código fuente, documentación y conjuntos de datos arbitrarios”.
      Si básicamente es una app P2P para compartir archivos, me pregunto en qué parte del protocolo se aborda el abuso. Si no, no veo en qué se diferencia de apps de intercambio de archivos de generaciones anteriores, como BitTorrent o Winny, donde se compartía arbitrariamente contenido con copyright como películas, música o software. Parece que un pequeño grupo de usuarios maliciosos podría arruinarlo, y también me pregunto si es posible separar redes “privadas” para poder estar seguro de no participar en algo ilegal
    • Es un proyecto interesante. Me da curiosidad su modelo de negocio.
      En Crunchbase figura que recibieron 12 millones de dólares de inversión, así que imagino que habrá algún plan de monetización
    • No estoy buscando activamente un reemplazo para servicios propietarios como GitHub o GitLab, pero de vez en cuando recibo solicitudes preguntando por alternativas. Me gustan las soluciones distribuidas y autohospedadas, así que Radicle va en una dirección adecuada, pero me preocupa la parte de los requisitos que dice sistemas operativos basados en Linux o Unix.
      Para el tipo de proyectos en los que ayudo, esto podría ser crítico. El código parece estar en Rust, y me pregunto si hay planes de dar soporte a MS Windows. ¿Supongo que Mac OS cuenta como parte de la familia Unix? Aunque no haya soporte oficial para Windows, me pregunto si sería posible un port a MSYS2.
      Para agregar un poco de contexto: no estoy en una posición donde tome decisiones como la selección de proveedores de servicios, sino que estoy vinculado a una organización semigubernamental que tiene una base de código open source considerable alojada en GitHub. A veces tengo la oportunidad de proponer ciertas ideas, pero no depende de mí que se adopten. Esta organización tiene una fuerte motivación para ser resiliente y no quedar a merced de las políticas de proveedores privados, y también para hacer “cosas buenas” como sostenibilidad o amplio acceso. Como organización gubernamental europea típica, GitHub entra en conflicto con esas políticas.
      También hay otros organismos gubernamentales encargados del archivado o del soporte de red, pero les falta capacidad o siguen atrapados en formas antiguas de hacer las cosas, y a menudo caen en trampas tendidas por proveedores. Por ejemplo, un servicio de archivado adoptó por completo DataBricks sin siquiera saber que era un producto comercial de código cerrado. Por eso tengo pocas expectativas de que esa organización aproveche bien una solución autohospedada, y una solución distribuida se ve atractiva. Pero no podemos usar una herramienta que no funcione en los principales entornos de PC de uso masivo
    • Me da curiosidad cuánto presupuesto se destinó a Radicle, cuántas personas lo desarrollaron y durante cuánto tiempo, y quién lo está usando
    • Me gusta el diseño del sitio web y de la aplicación. Muchos proyectos open source se derrumban por completo en el diseño visual; aunque sea algo superficial, un diseño bonito hace que uno quiera interactuar más con el proyecto.
      También me da curiosidad qué nivel de adopción esperaban antes y qué nivel esperan ahora, y si los resultados reales coincidieron con esas expectativas
  • Fue interesante observar cómo Radicle ha evolucionado durante los últimos cinco años aproximadamente. Asistí al taller Protocol Berg 2023, y creo que construyeron algo bastante potente y novedoso.
    Lo especialmente interesante es que incluso las funciones de colaboración son local-first. Puedes enviar parches e issues aunque no tengas internet, y cada vez que GitHub tenga problemas ya no hará falta que todo el equipo esté pegado a HN

  • Para su propósito parece un proyecto razonable, pero creo que Git en sí ya es open source y P2P. No hace falta recibir binarios con sh <(curl); basta con conectarse a otro servidor Git y traer o fusionar el código directamente con comandos de Git.
    Lo que Git no tiene son issues de código, wikis, debates, GitHub Pages y, sobre todo, una red de perfiles de desarrolladores. Hace falta una forma de poner los metadatos del proyecto dentro de .git mismo para que los commits de código fuente no se mezclen con la wiki o los issues. Quizá sea posible con referencias independientes como git notes.
    https://git-scm.com/docs/git-notes

    • Git fue diseñado teniendo en mente hasta cierto punto la interacción P2P, pero en la práctica no hay una forma de distribuirlo así. Toda distribución usa un modelo cliente-servidor, porque Git por sí solo carece de las funciones necesarias para desplegarse tal cual en una red P2P.
      Por ejemplo, no hay forma de verificar que el repositorio que recibí con git clone sea el repositorio que pedí. Por eso hay que clonar desde una fuente confiable, es decir, un servidor conocido. Eso no encaja con un P2P práctico.
      Radicle resuelve este problema asignando identificadores de repositorio estables[0] que se pueden verificar localmente, lo que permite que entidades no confiables alojen repositorios.
      [0]: https://docs.radicle.xyz/guides/protocol#trust-through-self-...
    • Radicle agrega seguimiento de issues y pull requests. Probablemente también incluya algunas otras funciones.
      En móvil, si tocas los botones que están debajo del enlace original, puedes ver la pestaña de seguimiento de issues, la pestaña de pull requests, etc.
    • Fossil(https://fossil-scm.org) pone issues, wiki y demás dentro del repositorio del proyecto
    • “Sobre todo, una red de perfiles de desarrolladores”; qué cosas pasan en este mundo.
      Recuerdo que Gerrit antes guardaba las revisiones de código en Git
    • El Git tradicional no puede evitar la censura, como en las noticias recientes relacionadas con Nintendo. Esta idea me venía dando vueltas en la cabeza, y de verdad me alegra que alguien haya hecho el trabajo difícil
  • En la documentación dice que “es importante publicar solo repositorios de los que seas propietario o mantenedor, y comunicarte con otros mantenedores para evitar crear identificadores de repositorios duplicados”.
    Ya me ha tocado gente que toma mi código y lo sube a GitHub, y también he visto muchas veces que, aunque en la documentación del producto o en una UI intermedia se ponga un aviso tipo “por favor no hagas X, porque les causa problemas a otros usuarios”, nadie lo lee, lo piensa ni le importa, y hacen X de inmediato. Por eso creo que mucha gente no va a respetar esta petición de la documentación; incluso la página principal solo explica cómo hacer push del código, mientras que esta petición “importante” está en una guía de usuario que casi nadie lee.
    Al final, me preocupa bastante que una acción que parece razonable, como simplemente hacer push del código open source en el que estás trabajando siguiendo las instrucciones de la página principal, pueda con el tiempo desordenar o volver confuso algo importante por la forma en que funcionan el protocolo y el almacenamiento.

    • No creo que haya un problema particular aquí. Incluso hoy, la ubicación oficial de un repositorio se encuentra por vías externas, como otra red social o un sitio web.
      En GitHub puedes obtener confianza adicional por la cantidad de estrellas, y en Radicle el equivalente sería la cantidad de seeds de un repositorio específico.
    • No hay que molestarse con la gente por ignorar documentación o instrucciones. Es un comportamiento muy lógico.
      En un día normal de uso de computadoras vemos decenas de avisos y usamos decenas de herramientas. Si piensas en el tiempo que tomaría leer todos esos avisos y toda la documentación de cada herramienta con cuidado, sería demasiado.
      Por eso es mucho mejor no leer y usar heurísticas. Por ejemplo, si cierras un documento con cambios sin guardar, sabes que el cuadro de diálogo dirá “¿descartar?”, así que no hace falta leerlo. Eso es algo bueno.
      La conclusión es que el software debe diseñarse asumiendo que la gente se comporta así. Por lo general es posible. Si tienes un ejemplo concreto, creo que podría proponer una solución mejor que “pedirlo y esperar que lo lean”.
    • Al estilo GitHub, ¿no sería poner un aviso de copyright en el código para dejar claro que tu repositorio es el original, y hacer que cambiar ese aviso de copyright sea ilegal? Esto también podría aplicarse aquí.
  • Felicidades por el lanzamiento. He estado siguiendo este proyecto y me entusiasma mucho ver cuánto ha madurado. Me pregunto cuál sería la mejor forma de migrar proyectos que actualmente están en GitHub. También me pregunto si hay un modo espejo que se pueda probar.

    • Todavía no hay mirroring integrado, pero lo estamos evaluando. En teoría, debería ser tan simple como configurar una tarea cron que cada hora haga fetch desde GitHub y push a Radicle.
      git pull github master
      git push rad master
  • Me pregunto qué tan descubribles serán estos repositorios para usuarios comunes. Parece que https://app.radicle.xyz/robots.txt no existe, así que los motores de búsqueda podrían indexarlo, y de hecho al buscar site:app.radicle.xyz en Google y DDG aparecen resultados.
    Todavía no aparecen arriba sin filtrar por sitio, pero el ranking podría mejorar.
    También estaría bueno tener herramientas que se integren con soporte de CI. En última instancia sería un bucle como while true; do wait_repo_update; git pull && ./run_ci.sh; done, pero hace falta una forma mejor que permita limitarlo solo a pushes de identificadores confiables.
    Por último, también hace falta un repositorio de artefactos. Aunque quizá Radicle no tenga que resolverlo todo. En particular, una red distribuida para compartir binarios grandes parece algo que podría usarse para fines no deseados bastante rápido.

    • Actualmente estamos trabajando en varias integraciones de CI, y también estamos creando nuestro propio CI nativo ajustado a nuestras necesidades.
    • Buen punto. Creo que los gateways como app.radicle.xyz deberían permitir que los crawlers indexen el conjunto completo de repositorios de la red.
  • Me gustaría que la gente definiera con claridad qué significa exactamente “P2P” o, como se dice más comúnmente, “distribuido”. Ahora se ha convertido en una buzzword vaga que puede usarse para cualquier cosa.

    • No he visto que este término se use mal con frecuencia. La definición que usan Radicle y la mayoría de los sistemas P2P es la misma que la de Wikipedia[0], en particular la parte que dice que “los peers son participantes con los mismos privilegios y capacidades dentro de la red”.
      Por lo tanto, un sistema P2P es un sistema en el que todos los participantes tienen “los mismos privilegios dentro de la red”. Normalmente eso también significa que todos ejecutan el mismo software.
      [0]: https://en.wikipedia.org/wiki/Peer-to-peer
  • Que la guía de instalación sea curl -sSf [https://radicle.xyz/install](<https://radicle.xyz/install>;) | sh hizo que mis expectativas se derrumbaran de inmediato ante la basura de curl-bash
    Este tipo de instalación es una fuerte señal de desarrollo poco pensado. Si este proyecto despega, creo que veremos desplegarse un desastre de seguridad. Espero que algún día aparezca una “alternativa open source P2P a GitHub” que no empiece con la peor forma de instalación

    • Esto es una sobrerreacción casi absurda
      Los riesgos de los instaladores por pipe son bien conocidos por mucha gente. Con esa lógica, habría que descartar Homebrew [1] (más de 38 mil estrellas en GitHub), PiHole [2] (más de 46 mil), Chef [3], RVM [4] y muchísimos proyectos open source que usan instaladores automáticos de un solo paso que se pasan por pipe a bash
      Una respuesta más razonable sería colaborar con los desarrolladores para que la documentación ofrezca métodos de instalación alternativos o explique mejor los riesgos, no quemar la casa para matar las chinches
      [1] https://brew.sh/
      [2] https://github.com/pi-hole/pi-hole
      [3] https://docs.chef.io/chef_install_script/#run-the-install-sc...
      [4] https://rvm.io/rvm/install
    • ¿No es una reacción un poco dramática?
      En cuanto al problema de que se interrumpa la transferencia, el script es seguro salvo que en tu sistema haya comandos peligrosos que coincidan con ^(t(e(m(p(d(ir?)?)?)?)?|a(r(g(et?)?)?)?)?|i(n(_(p(a(th?)?)?)?|fo?)?)?|s(u(c(c(e(s?s)?)?)?)?)?|f(a(t(al?)?)?)?|m(a(in?)?)?|w(a(rn?)?)?|u(rl?)?)
      Una vez resuelto eso, no veo qué diferencia hay con ofrecer solo el script y no el comando para ejecutarlo. Si quieres revisarlo, puedes descargar el script y ejecutarlo aparte. Creo que había una forma de detectar scripts enviados por pipe frente a scripts descargados, pero probablemente no funcione con un script tan pequeño
    • Aquí está [0]. El proyecto todavía está en fase previa al lanzamiento, así que hay piezas por resolver, y el foco actual está en otra parte. También puedes compilar desde el código fuente con cargo de Rust [1]
      [0] https://files.radicle.xyz/latest/
      [1] https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z3gqcJ...
    • Es cuestión de descargarlo o no, de confiar en los mantenedores o no. El método de instalación no debería ser lo que determine si confías en los mantenedores, y eso también aplica aunque sea curl-bash
  • Siento que escucho hablar de Radicle cada vez que sube el mercado cripto. ¿Alguien lo usa en serio?
    Esto recibió downvotes al instante. Lo pregunto en serio: me da curiosidad cuánto presupuesto se ha destinado a Radicle, cuánta gente ha trabajado en él y quién lo está usando

    • Es una pregunta justa
      Trabajo en la industria cripto y tuve la misma impresión. La última vez que oí hablar de Radicle fue en el ciclo alcista anterior, y durante el mercado bajista estuvo silencioso. Todo el mundo dice que el mercado bajista es para construir, y Radicle claramente es una herramienta para desarrolladores, así que resulta bastante raro
  • Me pregunto si planean soportar el caso de uso de ofrecer repositorios solo a un conjunto específico de nodos. Me imagino que hay gente que no quiere estar en GitHub, pero sí quiere colaboración privada

    • Sí. En Radicle a esto se le llama repositorios privados. No son visibles para el resto de la red y solo se comparten entre peers de confianza
      Sin embargo, no están cifrados en reposo, así que no se pueden almacenar en nodos intermedios que no formen parte del conjunto de confianza