Journal Un an de projet libre : bilan

Posté par  (site web personnel) . Licence CC By‑SA.
32
25
oct.
2011

Sommaire

Un an déjà, et oui ça va faire plus de 365 jours que je travaille sur Newebe, un projet libre de réseau social distribué, le premier commit de code datant du 19 octobre 2010. Je pense donc que le temps est venu de partager mon retour d’expérience sur le démarrage d’un projet libre (le premier dans mon cas) et par la même occasion de faire le bilan de cette année écoulée.

Titre de l'image

Ce qui s’est bien passé

Ca marche. Certains diront que tant qu’il n’y a pas de sécurité on ne peut pas dire que c’est le cas, mais toujours est il que nous sommes trois à l’utiliser (3 actifs sur 5 utilisateurs) depuis plusieurs mois et que cela fonctionne plutôt bien. Du fait de notre faible nombre, l’utilisation ressemble un peu à un chat mais c’est sympa de ce dire que nous sommes bien en train d’interagir sans serveur intermédiaire. L'échelle est encore petite mais c'est un résultat satisfaisant tout de même.

Newebe a sa place. Pour l’instant je n’ai trouvé aucun réseau social distribué ayant la même approche notamment pour ce qui est de l’aspect mono-utilisateur. Finalement ce qui ressemble le plus à Newebe est le projet OwnCloud, un outil permettant de stocker ses fichiers sur son serveur web à la dropbox. La similarité ? On a bien une instance d’OwnCloud pour une personne. Cela vaut donc le coup de continuer dans cette direction sans avoir l’impression de réinventer la roue.

Je m’en sers. Newebe me permet de communiquer avec les autres utilisateurs de Newebe et l’outil de gestion de notes me sert tous les jours.

Newebe a un site web et un wiki complet. Ca peut paraitre ridicule, mais c’est tout de même bien que j’ai eu le temps de mettre ça en place, ça permet a quelqu’un qui ne connait pas le projet de s’informer rapidement de ses tenants et aboutissants.

J’ai rencontré des gens qui partagent mon opinion sur le sujet. Réaliser Newebe m’a poussé à écrire plus de choses sur les problèmes de vie privée liés aux réseaux sociaux centralisés. Je me suis motivé plusieurs fois à aller à quelques événements réunissant des codeurs, principalement au Loop. Au final j’ai croisé pas mal de gens qui réfléchissent à des alternatives, ce qui est plutôt encourageant.

Techniquement, j’ai appris énormément de choses. Ce projet m’a permis de faire une veille technique importante et de me mettre à la page sur les dernières tendances des technologies webs, notamment autour des serveurs asynchrones comme Tornado et Node.js, mais aussi pour les bases de données NoSQL avec CouchDB et MongoDB ainsi que pour le développement client avec Coffeescript et Backbone et enfin avec le versioning décentralisé à travers Git. J’avais pris du retard et étant motivé par Newebe j’ai pu faire une sérieuse remise à niveau sur tout ces plans.

NB : Je me suis rendu compte aussi que le choix de techno dans un projet informatique est très délicat et qu’il demande pas mal de réflexions. C’est une étape qui ne doit vraiment pas être prise à la légère. Il ne faut pas avoir peur d’écrire des prototypes dans plusieurs frameworks ou langages.

Sur l’organisation d’un projet informatique aussi. Au travail, j’ai été formé avec la gestion de projets en V, j’ai pratiqué des méthodes « agiles ». Ces deux façons de faire n’était pas toujours très convaincante mais à travers Newebe je me suis intéressé à des nouveaux concepts que sont ceux du développement continu, de la méthode Lean et surtout des principes de 37signals. Ils prônent le besoin de livrer et déployer le code le plus fréquemment possible pour obtenir des retours utilisateurs très vite et ainsi valider la pertinence des fonctionnalités codées. La simplicité est aussi mise en avant. En effet elle pousse à chercher des solutions plus élégantes ou directes afin de gagner en efficacité. Ceci se fait souvent au détriment du nombre de features mais permet de se concentrer sur l’essentiel et d’obtenir quelque chose de fonctionnel plus vite.

NB : J’ai également appris quelles étaient les caractéristiques d’un logiciel libre, notamment autour de la gestion de code collaborative. Ceci m’a poussé à mettre en place les outils nécessaires : dépôt de code public, bug tracker, mailing list, wiki, site web, ce blog… Mais je n’ai encore pu rien expérimenter pour Newebe pour le moment étant donné que je suis encore seul sur le projet.

Titre de l'image

Ce qui s’est mal passé

Il n’y a pas de communauté. Certains mesurent la qualité d’un logiciel libre à la taille de sa communauté. C’est discutable mais dans les grandes lignes, ils n’ont pas tort. Un tel logiciel ne peut reposer sur les épaules d’une seule personne. D’une part ce n’est pas pensable à terme de maintenir le code en étant seul, d’autre part, cela rend le projet totalement dépendant de son initiateur. C’est d’autant plus inquiétant que ça peut signifier que Newebe ne répond pas bien au problème des réseaux sociaux décentralisés et n’intéresse personne.

D’un autre côté, l’aspect promotion n’est vraiment pas mon fort et j’ai de réels progrès à faire dessus. De plus, je noircis un peu le tableau puisque nous sommes trois à nous en servir et que je suis bien conseillé par les deux autres utilisateurs.

Il n’y a pas de processus de développement et il manque beaucoup trop de tests unitaires et fonctionnels. Corollaire du point précédent, étant seul j’ai codé à l’arrache, en empilant les fonctionnalités les unes sur les autres. Ceci est rassurant psychologiquement (j’ai obtenu un logiciel complet plus vite) mais en contradiction avec l’idée de faire du développement continu. En effet pour promettre des releases fréquentes, il faut pouvoir tester toute l’appli fréquemment, ce qui n’est possible qu’avec des tests unitaires qui couvrent la majeure partie du code.
Si je souhaite accueillir d’autres développeurs, je ne pourrai leur donner une façon de procéder et surtout chacun de leur commit me fera un peu peur car je manquerai de tests pour m’assurer que rien n’est cassé.

J’ai négligé la sécurité. C’est volontaire, mais il faut bien reconnaitre que si demain je discute avec un spécialiste de la question, il risque d’être un peu dépité. De plus certains utilisateurs pourraient être rebutés par l’idée d’avoir un logiciel plus ou moins ouvert à tout le monde. Ceci a été tout de même fait en connaissance de cause, donc rien d’alarmant pour le moment.

Cela prend beaucoup de temps. J’ai dû coder, me former à de nouvelles technos, documenter, faire un site web, faire un peu de pub, assurer le support utilisateur, mettre en place les outils… Toutes ces activités sont assez chronophages, cela demande donc de bien aménager son temps libre. J’en viens même à penser qu’il vaut mieux être étudiant pour lancer un projet libre. Je ne m’en plains pas car je me suis beaucoup amusé à faire tout ça mais c’est quelque chose dont il faut avoir conscience quand on démarre.

Et après ?

Pour la suite de Newebe, je compte donc me concentrer sur l’aspect communauté. Au delà du fait d’espérer d’avoir d’autres développeurs actifs, ce serait intéressant d’avoir plus d’avis de gens extérieurs. Au niveau des développements, je vais privilégier le partage d’images (afin de rendre Newebe plus sexy et lui donner ainsi un vrai look de réseau social) ainsi que les tests automatiques manquants.

Enfin, même si le projet n’a pas eu le succès que j’espérais, je suis toujours content de le voir progresser, j’ai appris énormément de choses et pu mettre en application mes réflexions. Ma motivation est donc toujours aussi forte pour faire avancer Newebe.

Liens en rapport :
Site : http://newebe.org/
Source : https://github.com/gelnior/newebe
Wiki : https://github.com/gelnior/newebe/wiki
Pourquoi Newebe :
http://gelnior.wordpress.com/2011/09/28/facebook-et-google-vous-regardent/
https://github.com/gelnior/newebe/wiki/Pourquoi-un-reseau-decentralise-%28version-longue%29

Credits photos

photo 1 : Pauer Korde, licence Creative Commons by-nd-2.0
photo 2 : Virtual Photography Studio, licence Creative Commons by-2.0

  • # Sécurité ?

    Posté par  (site web personnel) . Évalué à 10.

    Autant négliger de faire des tests unitaires, pour un usage personnel ça passe (on s'en rend compte quand on l'utilise !).
    Par contre négliger la sécurité me semble être assez grave, dans le sens où c'est difficilement rattrapable. Je pense qu'il est beaucoup plus facile de faire un truc sécurisé depuis le début, plutôt que de le sécuriser à posteriori. Hélas ça rentre en contradiction avec l'apprentissage au fur et à mesure, mais rajouter des mysql_escape (exemple au pif) à chaque requête sql, une fois que le projet fait 100k lignes, ça devient du suicide.
    Enfin c'est mon point de vue en tout cas.

    • [^] # Fonctionnalités >> sécurité

      Posté par  . Évalué à 9.

      Si tu regardes bien tout les projets informatiques ayant du succès avaient peu de sécurité, ça a été ajouter ensuite.
      A mon avis pour un petit projet comme ça, tu as une progression logique:
      1. proto pour apprendre ce qui plait, ce qui marche.
      2. ré-écriture sérieuse ou il faut faire du propre: projet maintenable, qui peut héberger beaucoup d'utilisateurs et sécurisé.

      Clairement il est dans l'étape (1)..
      Passer directement à (2), c'est retarder l'apprentissage de ce que le projet doit faire, un bon moyen de se planter à mon humble avis.

      • [^] # Re: Fonctionnalités >> sécurité

        Posté par  (site web personnel) . Évalué à 4.

        Oui en gros l'idée c'est ça, disons que je termine la phase 1. Je faisais aussi référence à 37signals car un de leur principe est de faire les choses quand tu en as vraiment besoin. Jusqu'à présent il y avait beaucoup de points à "valider" avant de s'attaquer à un problème complexe de sécurité qui m'aurait entrainé dans un long tunnel et probablement découragé.

        Autre aspect, la sécurité c'est vraiment pas mon truc. Plutôt que de s'improviser spécialiste du porblème, j'espérais et espère toujours, qu'un contributeur plus avisé sur la question puisse m'aider.

      • [^] # Re: Fonctionnalités >> sécurité

        Posté par  (site web personnel) . Évalué à 3.

        Il y a aussi quelques contre-exemples de projets qui ont misés dès le début sur la sécurité et qui ont du succès : postfix, vsftpd ...

        • [^] # Re: Fonctionnalités >> sécurité

          Posté par  . Évalué à 3.

          Oui, enfin ce n'était pas les premiers serveurs de courrier ou FTP, mais dans le cas d'un projet dans le cas d'un domaine moins bien défini, la sécurité arrive rarement en premier.

        • [^] # Re: Fonctionnalités >> sécurité

          Posté par  . Évalué à 2.

          Disons plutôt qu'ils ont été conçus en réponse à d'autres produits aux problèmes de sécurité constants (sendmail pour le premier, le démon ftp de base sous Unix pour le second me semble-t-il).

          Ça rejoint l'idée de réécriture sérieuse décrite par reno.

          Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

      • [^] # Re: Fonctionnalités >> sécurité

        Posté par  (site web personnel) . Évalué à 2.

        Surtout qmail

  • # Plus d'info !

    Posté par  . Évalué à 6.

    Comment il marche ton réseau P2P ? Tu as utilisé quoi comme technique ? Comment trouve-t-on les premiers nœuds ? Comment les messages sont échangés ? Comment mes données sont stockés ? Si je me déconnecte, je disparais ?

    J'ai pas trouvé toutes les réponses sur le wiki :(.

    Conseil d'un étudiant en master de systèmes parallèles et distribués : lors de la création d'un réseau P2P, il faut penser à tout des le début (sécurité, nœuds qui font chier (nœuds "byzantins")...), sinon tu risque d'avoir de sérieux soucis ensuite. Par exemple chez Bitorrent ils ont oublié de mettre en place un système qui force les gens à partager les fichiers, on se retrouve avec beaucoup de gens qui télécharge mais peu qui redistribue. Pourtant il existe de bonnes techniques (voir la littérature foisonnante à ce sujet).

    • [^] # Re: Plus d'info !

      Posté par  (site web personnel) . Évalué à 4.

      Comment il marche ton réseau P2P ?
      Il faut pas vraiment voir ça comme un réseau P2P, au sens où les messages ne sont pas relayés par les noeuds. En fait chaque newebe communique directement avec ses contacts. Au début de newebe je disais que c'est un réseau social presque distribué car en fait il est juste très très décentralisé.

      Tu as utilisé quoi comme technique ?
      A chaque fois que tu postes un message, ça génère une requête HTTP pour chacun de tes contacts. Les newebes communiquent via des API REST.

      Comment trouve-t-on les premiers nœuds ?
      Pour trouver un noeud c'est simple, tu rencontres quelqu'un, tu sympathises, il te donne l'URL de son Newebe et ensuite tu te connectes sur ton newebe et tu l'ajoutes à tes contacts. Du coup, ton newebe et le sien se connaissent.

      Comment les messages sont échangés ?
      Newebe sauvegarde ton message chez lui sous la forme d'un "document" JSON. Newebe stocke donc des documents (via la base CouchDB). Une fois cette opération faite, il transmet le document via une requête HTTP à son contact qui va le sauvegarder à son tour en l'estampillant avec une clé.

      Si je me déconnecte, je disparais ?
      Si tu coupes ton newebe, il ne reçoit plus de messages ni ne peut en envoyer. Toutefois, tes données restent stockées chez toi. Tout ce que tu as envoyé à tes contacts est stocké chez eux.
      Si tu rallumes ton Newebe, tu n'as qu'à appuyer sur le bouton "sync" et il va rappatrier tout ce que tes contacts ont envoyé depuis un mois (modulo les bugs) et il sauvegardera tout ce qu'il n'a pas déjà.

      • [^] # Re: Plus d'info !

        Posté par  (site web personnel) . Évalué à 1.

        Il faut pas vraiment voir ça comme un réseau P2P, au sens où les messages ne sont pas relayés par les noeuds. En fait chaque newebe communique directement avec ses contacts. Au début de newebe je disais que c'est un réseau social presque distribué car en fait il est juste très très décentralisé.

        Je ne vois pas comment ca marche? Tu stocke les addresses ip de test contacts? Chacun est serveur et client à la fois?
        Ou alors je n'ai pas tout compris :)

        • [^] # Re: Plus d'info !

          Posté par  (site web personnel) . Évalué à 1.

          Oui voilà c'est bien ça !

        • [^] # Re: Plus d'info !

          Posté par  . Évalué à 1.

          Si j'ai bien compris, chaque noeud est un serveur web. Donc tu donnes l'adresse de ton serveur web.

          • [^] # Re: Plus d'info !

            Posté par  (site web personnel) . Évalué à 1.

            Oui, tu as bien compris.

            • [^] # Re: Plus d'info !

              Posté par  (site web personnel) . Évalué à 2.

              Mais du coup, il te faut un dns? ou une adresse ip, comment tu fais avec les ip qui changent?

              • [^] # Re: Plus d'info !

                Posté par  (site web personnel) . Évalué à 3.

                En effet, il faut être chez un opérateur qui propose une IP fixe ou avoir un nom de domaine qui redirige toujours sur ta machine.

                • [^] # Re: Plus d'info !

                  Posté par  (site web personnel) . Évalué à 2.

                  Et en admettant que j'ai un contact Newebe qui n'ai jamais connecté en même temps que moi, alors je ne vais jamais voir ses publications et il ne va jamais voir les miennes ?

                  Ou alors est ce que si A est ami avec B et C, que B et C sont aussi amis, et bien C récupère aussi les publications de A via B ?

                  Bravo pour le compte rendu de ce projet que j'ai pu ainsi découvrir ....

                  • [^] # Re: Plus d'info !

                    Posté par  (site web personnel) . Évalué à 1.

                    On peut imaginer aussi qu'il découvre les adresses ip non-fixes via les "amis" communs aussi...

                  • [^] # Re: Plus d'info !

                    Posté par  (site web personnel) . Évalué à 3.

                    Merci :). Effectivement si les newebes ne sont jamais connectés en même temps ils ne peuvent plus se synchroniser. En fait l'utilisation normale du newebe c'est de l'installer sur un serveur (type plug computer) qui reste allumé tout le temps.
                    J'ai pas encore creusé l'idée d'utiliser les contacts en commun, mais effectivement ce que vous dites weeber et toi, ça mérite réflexion.

                    • [^] # Re: Plus d'info !

                      Posté par  (site web personnel) . Évalué à 2.

                      En fait l'utilisation normale du newebe c'est de l'installer sur un serveur (type plug >computer) qui reste allumé tout le temps.

                      il me semble avoir lu dans le wiki que le but final était de s'adresser à M. Toutlemonde. Je ne pense pas que l'utilisation sur un serveur soit pour M. Toutlemonde. Et c'est peut être le problème de la topologie décentralisée, car cela implique d'être client et serveur et donc il faut que M. Toutlemonde paramètre sa box pour laisser entrer des connexions.
                      En même temps, tu pourras tj me répondre que M. Toutlemonde arrive à paramétrer sa box pour faire fonctionner une mule ou autre pour charger des mp3 ou des films...

                      Par contre il faudrait pouvoir trouver un dispositif pour que l'utilisation de newebe n'implique pas une IP fixe ou un DNS...

                      Pour finir, une dernière remarque que je me faisais, dans le cas ou l'on a bcp d'amis, on va dire 1000.
                      J'ai envie de partager une image qui va faire 500 ko (et encore elle est pas très grosse mon image). Donc dans le fonctionnement actuelle, je vais envoyer mon image 1000 fois (si je me trompe, ne pas hésiter à me le dire). Je vais donc avoir en gros 500 Mo de données à envoyer, il me semble que c'est bcp non ? Je pense qu'il faudrait trouver un dispositif (justement avec les amis des amis... etc..) pour que ma photo arrive chez mes amis sans pour autant avoir à l'envoyer autant de fois que j'ai d'amis....

                      Bon pour finir vraiment, je vais terminer sur du positif, il est à mon sens très bien de travailler sur une solution décentralisée de réseau social.

                      • [^] # Re: Plus d'info !

                        Posté par  (site web personnel) . Évalué à 1.

                        Pour les images, c'est un soucis en effet. Ce que je compte faire, c'est d'envoyer un thumbnail léger à tous les contacts et qu'ensuite l'image complète ne soit téléchargé qu'à la demande du contact qui a reçu le thumbnail. Seuls les contacts intéressés récupéreront l'image.

                      • [^] # Re: Plus d'info !

                        Posté par  . Évalué à 1.

                        Non Mrtoutlemonde il a upnp actif sur sa "baux" et son client/server p2p commande à la baux...

  • # Hop, hop, hop !

    Posté par  (site web personnel) . Évalué à 10.

    Ceci m’a poussé à mettre en place les outils nécessaires : dépôt de code public, bug tracker, mailing list, wiki, site web, ce blog

    Tu t'es trahi ;-)
    Fallait modifier la phrase avant de poster ce journal car, là, ça incite à chercher l'origine du copier/coller : http://gelnior.wordpress.com/2011/10/24/un-an-de-projet-libre-bilan/

    Ceci dit, merci quand même parce que le journal est intéressant et que le projet à l'air sympa.

  • # Merci

    Posté par  . Évalué à 3.

    C'est toujours intéressant d'avoir des retours d'expérience, donc merci beaucoup d'avoir pris du temps pour nous faire part de tout ça. Deux toutes petites choses sans importance :

    La similarité ? On a bien une instance d’OwnCloud pour une personne.

    Non, tu peux ouvrir plusieurs comptes sur une même instance. Il n'y a pas de limite.

    J’en viens même à penser qu’il vaut mieux être étudiant pour lancer un projet libre

    Je … Comment dire … Étudiant en licence alors, non ?

    • [^] # Re: Merci

      Posté par  (site web personnel) . Évalué à 1.

      Merci pour l'info sur Owncloud. La référence à l'étudiant c'est que dans mes souvenirs j'avais pas mal de temps libre. En plus j'étais entouré de beaucoup développeurs, ce qui peut vraiment aider.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.