Implémentation de Duniter en Rust?

Perso je débug avec GDB, mais j’ai pas beaucoup plus d’informations. J’arrive à voir la valeurs des variables, mais les conteneurs utilisent du code unsafe avec des pointeurs donc ça pose problème.

Je vais essayer de logger les états de ce nœud pour trouver d’où ça vient.

EDIT: Trouvé ! Le bug avait lieu dans le fonction Node.add_link(…) (aussi dans remove_link). Pour pouvoir manipuler 2 noeuds avec des références mutables, je dois couper mon Vec en deux. L’indexage dans le cas où from > to n’était pas bon.

Ca me fait penser : est-qu’il y a une sécurité dans le code actuel pour empêcher un nœud de se certifier lui même ?

1 Like

Peut être pas dans le module wotb, en tout cas cette sécurité se situe en amont au niveau de l’application du Protocole donc le cas n’est pas possible en prod.

Je vais au cas où gérer ce cas, et compléter les tests unitaires pour le vérifier.

Je suis plus très loin de la fin, j’ai juste un problème avec wot.get_paths(...) qui semble toujours retourner 0 chemins.

2 Likes

Les tests unitaires passent ! :smiley:

Des suggestions avant que je passe au binding JS ?

3 Likes

Félicitations tu a été très rapide, si après tests ça se passe bien on pourra intégrer ton module dans duniter-ts 1.7 !

1 Like

Je n’en suis pas aussi certain, comme tu le sais cela reste du code compilé, or il n’est pas certain que la version Desktop de Duniter accepte les modules Rust sans broncher :

https://github.com/duniter/duniter/blob/59f050e170c6c8b183dfe5389b403007fa2e9033/release/arch/debian/build-deb.sh#L108-L127

Je ne connais pas les commandes que tu as cité, mais pourquoi ça poserait problème ? Si la version client “combine” tous les exécutables il ne devrait pas y avoir de problème, non ? Surtout que le Rust est compilé en du code assembleur sensiblement proche de ce que tu aurais avec du C.
Si tu peux m’indiquer la procédure à suivre pour tester ça je peux regarder :slight_smile:

De même je regarderai ce soir ce que ça donne avec Neon, ça à l’air plutôt simple à utiliser.

C’est une histoire d’ABI différente entre NodeJS et Nw.js (node-webkit) : https://github.com/nwjs/nw.js/wiki/using-node-modules#3rd-party-modules-with-cc-addons

Je peux choisir l’ABI d’export :wink: Mais je pense que Neon le fait très bien par lui même :slight_smile:

Pas de problème à ce que ma crate soit upload sur crates.io pour simplifier les builds ?

Bien ! Mais nous serons fixés une fois les tests réalisés.

Il faudrait que j’ajoute un license avant de l’envoyer sur crates.io. Tu me propose quoi (qui soit utilisable de mon côté tout en étant compatible avec celle de duniter-ts) ?

La même que pour wotb ?

D’acc. Je demande car j’ai jamais publié de code, et encore moins fait attention aux licenses. C’est la “GNU General Public License v3.0” : qu’est-ce qu’elle permet ou empêche de faire avec le code ?

Elle oblige toute évolution du code à être repartagée.

Elle n’interdit pas l’utilisation du code pour un service web non libre, par contre.

1 Like

Super merci. Je vais commencer à travailler sur la partie JS du coup :slight_smile:

Il me semble qu’elle contraint aussi tout logiciel qui s’appuie dessus à être lui-même partagé sous licence GPLv3.

1 Like

C’est bien ce que je me souvenais. Dans le cadre de Duniter ça me semble une bonne chose, par contre je ne pense pas que ça serait souhaitable pour d’autres types de projets.

Ça dépend … il est possible de démontrer que la GPL (et ses dérivés comme AGPL) est la seule licence véritablement symétrique dans l’espace-temps humain. Bon je suis pas encore bien rôdé dessus, et ce n’est pas le sujet ici, donc je t’épargne cela.

Toutefois on n’est pas forcé non plus de vouloir donner les même droits à chaque individu de cet espace-temps, et dans ce cas oui on peut choisir une autre licence type MIT ou autre.

Je crois que je vais réécouter l’interview de Carl Chenet à ce sujet. :slight_smile:

1 Like

Je vois. Je prend la GPL3 pour mes projets autour de Duniter, et je verrais pour les autres.

Je viens de setup un projet Neon, et je peux bien appeler mon code Rust depuis le code NodeJS.
Du coup pour que ça soit compatible avec votre utilisation actuelle il va falloir que je rajoute votre interface WoT en mémoire/fichier. Je vais regarder comment faire ça proprement :slight_smile:

2 Likes