Entretien avec Frank Rousseau, co-fondateur de Cozy Cloud

Jdh : Bonjour Frank et merci de participer à cet entretien pour le Journal du hacker. Pour nos lecteurs qui ne te connaissent pas, peux-tu te présenter rapidement ?

Frank : Ah tout de suite une question difficile ! J'ai 33 ans, j'ai toujours aimé bidouillé des sites web et des web apps en dehors de mes études (d'informatique) et de mon boulot.

Je ne me suis mis au dev de logiciel libre sérieusement il y a 5 ans. J'ai commencé par développer un projet de réseau social distribué en Python sur mon temps libre. Ça m'a permis de monter un projet propre avec ma façon de faire. Puis j'ai +enchaîné sur le projet Cozy, cette fois à temps plein, une plateforme pour rendre le serveur personnel simple d'utilisation (basée surNode.js et codée enCoffeeScript).

A côté de ça j'ai toujours beaucoup travaillé sous Linux (Slackware, Debian et Ubuntu) et mon éditeur de prédilection est Vim.

Cozy s'est fait autour d'un projet entrepreneurial. Ce qui m'a permis d'évoluer dans le monde du Logiciel Libre à plein temps depuis maintenant 4 ans. En plus de Cozy j'ai maintenu quelques bibliothèques Node.js que nous avons extraites du projet. C'est une expérience d'autant plus intéressante que je suis passé par étapes, de développeur seul à leader technique d'une équipe de 10 personnes de haut niveau. J'ai du aussi gérer pas mal d'aspects produits et marketing pour structurer le projet et le faire connaitre. Et par dessus tout ça, j'ai vu notre communauté grandir, comme vous le comprenez c'est une sacré aventure !

Jdh : Peux-tu nous en dire un peu plus sur ce premier réseau social distribué que tu as lancé et comment ça a influencé ta vision pour arriver à l'idée de Cozy ?

Frank : Ce réseau social s'appelle Newebe. J'ai commencé à y réfléchir à l'époque de la prise de conscience générale sur le fait que Facebook, de part son architecture, stockait toutes nos conversations. Peu de temps après le réseau social Diaspora* faisait son buzz. Cela semblait être une bonne solution mais je n'étais pas satisfait de leur approche fédérative. Diaspora* permettait d'avoir plusieurs nœuds basés sur du Logiciel Libre plutôt qu'un nœud central basé sur du code propriétaire. C'était un gros progrès mais il y avait toujours un intermédiaire. Même problème avec les approches plus anciennes basées sur XMPP. Aujourd'hui, je suis moins extrême sur la question mais à l'époque je considérais que ça déplaçait le problème sans le résoudre.

Je me suis donc dit qu'il fallait une autre approche. Je suis parti de l'utilisateur en considérant que chaque nœud devait représenter son propriétaire. J'en ai déduit qu'il fallait faire une interface web adossée à une API Rest que chacun héberge chez soi. En faisant communiquer les instances d'API entre elles, on obtiendrait un réseau social complètement distribué. C'était beaucoup plus difficile que prévu à réaliser mais je suis tout de même arrivé à quelque chose qui marche. A ce moment là, Newebe ne gérait que le microblogging. Mais là j'avais envie de permettre d'ajouter d'autres applications sociales qui profiteraient des fonctionnalités de communication de Newebe pour collaborer de manière distribuée.

NB : Voici la spec que je m'étais écrite avant de commencer Newebe.

Ce réseau social n'a pas eu beaucoup de succès et je ne suis donc pas allé au bout du concept. Mais cette expérience m'a donné les prémisses de ce que nous allions faire sur Cozy. Mon expérience de Newebe m'a influencé sur bien des aspects dans Cozy mais voici les principaux qui me viennent à l'esprit :

J'avais remarqué que faire un réseau social demande non seulement de faire basculer l'utilisateur mais aussi tous ses amis. Ce qui est très compliqué avec une approche distribuée / auto-hébergée. Pour Cozy, ce constat nous a conforté dans notre choix de nous focaliser sur des usages persos plutôt que sociaux / collaboratifs. Techniquement c'est plus simple et ça ne demande pas à l'utilisateur de demander à tous ses amis de passer à l'auto-hébergement.

J'avais aussi constaté via l'approche CouchDB que le fichier n'est qu'une représentation de la donnée. Ce n'est donc pas le bon support pour représenter les données de l'utilisateur. C'est pourquoi dans Cozy nous nous sommes concentrés sur les documents JSON comme axe de représentation de la donnée.

Pour les choix de techno, mon expérience de Tornado m'a poussé vers Node. J'avais été convaincu par l'approche de serveur web asynchrone (requête non-bloquantes) de Tornado. Node suivant cette philosophie et étant très bien outillé pour le développment web, nous avons choisi de basculer sur cette techno.

L'utilisation de CouchDB dans Newebe nous a permis de démarrer vite sur Cozy car je connaissais déjà cette base de données. Mais aujourd'hui, j'ai des doutes sur la pertinence de ce choix à cause de son système de vues/requêtes un peu particulier.

Enfin, les single-page applications nous ont motivé à fortement découpler le serveur du client. C'est important car nous avons toujours vu Cozy comme un point de pivot des données de l'utilisateur. Ainsi n'importe quel type de client peut s'y connecter (mobile, CLI, appli desktop, etc.)

Au-delà de ça, avec Newebe, je me suis beaucoup intéressé au life-logging, au quantified-self et aux assistants personnels. Ces univers sont de bonnes sources d'inspiration pour donner une direction à Cozy !

NB : Un lien de réflexions liées à Newebe.

Bref tout ça pour dire que le travail fait sur Newebe m'a beaucoup aidé pour apporter les premières briques de Cozy.

Jdh : Venons-en à Cozy. Comment est né le projet ? Quelles ont été les motivations à l'origine du projet ? Quelle a été ton approche au début du projet et à quel moment as-tu commencé à sentir que cela mènerait loin ?

Frank : Fin 2011, je me retrouve brutalement au chômage avec quelques indemnités. Ça faisait un moment que je voulais monter une boîte et cette situation me le permettait. J'avais lu quelques bouquins sur le sujet et je me mettais donc en veille en commençant à penser à des idées avant de me lancer (je voulais finir avant un projet de bouquin photos auquel j'avais participé). Un soir de décembre, en lisant un post sur le Framablog à propos de la vie privée, je tombe sur un commentaire un peu particulier d'un certain Benjamin qui cherche à monter un projet d'entreprise pour proposer une solution. Un peu hésitant au départ, je me dis que ça tombe plutôt bien et que je ferais mieux de le contacter. Après s'être rencontrés, on se rend compte qu'on est totalement sur la même longueur d'ondes. Rapidement on s'y met. Il avait une vision business alors que j'arrivais avec une vision technique, ça collait bien. On a trouvé un nom au projet, on a fait les premiers protos, on a pris un nom de domaine, monté un site web, on s'est organisé et on a monté la boite.

Au final, ça nous a pris du temps pour se décider sur comment tout ça allait marcher, mais après de nombreux mois (presque un an !), nous voilà avec une société enregistrée au tribunal de commerce, un joli site web et de quoi quoi déployer nos protos de Cozy. Tout ça nous a pris pas mal de temps. Un stagiaire, Lucas, nous avait rejoint pour nous aider sur la partie Sys Admin. On ne le savait pas encore mais il allait devenir notre premier employé.

Forts de ce qu'on avait monté, on a pu convaincre Zoé, Romain et Joseph de nous rejoindre. En stage au début et ensuite, à temps plein. Avec eux ça a boosté. Notre proto était de plus en plus fonctionnel. Ça restait bancal mais c'était utilisable et on voyait bien l'intérêt de la plateforme. On a eu de l'exposition dans plusieurs endroits : LinuxFr, LeWeb, Hacker News, Mozilla WebFWD et un article dans le magazine Wired. On a vu une première communauté internationale se former. Là je pense qu'on a commencé à vraiment y croire. Notre histoire prenait forme et on voyait la plateforme progresser de jour en jour. La tuile qui m'était tombé dessus avec ma boite précédente s'est transformée en belle opportunité de faire progresser le schmilblick du lien entre cloud et vie privée.

Pour ce qui est des motivations, notre but était de permettre aux utilisateurs de service web de profiter d'une plateforme simplifiant l'usage du serveur personnel. Avec ce nouvel outil, un utilisateur récupère ses données dans une base de données, en maîtrise les accès et surtout peut y brancher ses périphériques et autres application lourdes. Ainsi on apporte aux gens un meilleur contrôle de leurs données tout en fluidifiant leur vie numérique. Les outils type "silos" sont pratiques mais comme ils sont cloisonnés, ils ne nous facilitent pas vraiment la vie. C'est le principal problème que Cozy résout.

Pour l'approche, comme tu as pu le comprendre, on a fonctionné en itération avec pour objectif d'avoir quelque chose de fonctionnel le plus tôt possible. Ça a pris du temps au début car il a fallu, entre autres, se mettre à l'admin système sérieusement, maîtriser l'écosystème Node alors qu'il était tout jeune et faire une app web "classique" pour que les gens puissent s'inscrire et demander un Cozy. Enfin il a fallu trouver et assembler diverses technos pour faire marcher le tout sans trop réinventer la roue (le déployeur d'apps Haibu et l'indexeur Whoosh notamment). En plus de ça on travaillait avec La Poste et la FING pour réaliser des prestations qui nous ramenaient des sous. Ça nous a pris pas mal de temps mais en restant sur ce mode tout en augmentant notre équipe (grâce à une belle levée de fonds), nous avons pu continuer jusqu'à aujourd'hui et obtenir une belle plateforme pleinement fonctionnelle !

Jdh : Aujourd'hui, combien êtes-vous à travailler sur Cozy ? Quels sont les axes de développement actuels ? J'ai vu passer une offre en partenariat avec OVH et j'ai trouvé intéressante l'initiative. Quelle est ta vision à moyen terme pour Cozy ?

Frank : Aujourd'hui nous sommes une petite vingtaine toutes professions confondues. En développeurs / admins, on est une petite dizaine accompagnée d'une équipe produit de 3 personnes.

Au niveau des développements, on est en train de finaliser notre client desktop et notre webmail. L'équipe est vraiment efficace et nous avons hâte de voir le résultat. On aura enfin une plateforme proposant tous les services de base, auto-hébergeables et sur laquelle tous nos périphériques peuvent se connecter.

La vision à moyen terme de Cozy est de continuer à consolider tout ça et de construire une offre commerciale sous forme de location de Cozy en ligne puis peut-être sous une forme de box à brancher chez soi. On travaille déjà avec Gandi et OVH pour qu'ils nous aident à construire cette offre. On va aussi mettre l'accent sur l'enrichissement des données duCozy via un système de connecteurs. Ce sont des petits scripts qui vont récupérer les données que vous déposez chez vos différents fournisseurs (factures, santé, banque, etc.). C'est un gros différenciateur de Cozy par rapport aux autres clouds et la communauté aime bien ce concept car elle peut +facilement participer.

On va aussi commencer à voir des grosses boites qui déploient leur compte client sur la plateforme (une app pour gérer ses contrats et intéractions). On voudrait aussi développer des fonctionnalités pair à pair au sein du Cozy. Deux chercheurs y travaillent chez nous, on a hâte de voir ce que ça donne !

Jdh : Les lecteurs du Journal du hacker sont très curieux Peux-tu nous donner quelques détails sur les technologies utilisées pour votre infrastructure afin de développer et faire tourner Cozy ?

Frank : A propos de notre infrastructure d'hébergement, il y a pas mal de choses à dire. Tellement que j'aurais été plus à l'aise que nos admins répondent à cette question à ma place. Mais en gros, ils sont deux, Nicolas et Lucas, pour faire tourner 2500 conteneurs Cozy. Un troisième vient les rejoindre (Aeris, que vous connaissez sans doute) pour les aider. Enfin, Cédric développe des outils maison pour mieux gérer notre infra, mais il a un profil développeur. Pour se synchroniser, ils bossent tous sur un mode Kanban.

Pour le matos, on utilise des gros serveurs OVH appartenant au même rack virtuel. Ça nous permet d'avoir un réseau privé pour ces machines. On les découpe ensuite en conteneurs et on met un joli proxy devant pour gérer la distribution des requêtes en fonctions du nom de domaine.

Niveau technos, l'orchestration se fait via SaltStack et nous déployons des conteneurs OpenVZ (en 2016 on voudrait migrer vers LXC). Nous avons aussi pas mal de sondes pour récupérer des données pour faire de la métrologie via une stack Elastic Search / Logstash / Kibana et une stack InfluxDB / Grafana (selon le type de données).

Pour le monitoring, c'est Shinken qui nous réveille la nuit quand survient un problème. Enfin, les backups sont gérés via une solution maison et notre intégration continue se base sur Jenkins. Pour notre outil interne, on a développé une API via Flask et nos données sont stockées dans une base MongoDB. Cet outil nous permettra bientôt de gérer nos conteneurs de manière +uniforme quelque soit le fournisseur de machines (Gandi ou OVH par exemple).

Les conteneurs Cozy font tourner des process Node.js, une base de données CouchDB (Erlang) et des sondes Beaver et collectd. Le tout tourne sur une Debian 8 minimaliste. Les tests des applications tournent sous Travis et sont consultables publiquement.

A côté de ça, on a pas mal d'images à maintenir (Raspberry Pi, Virtualbox, hébergeurs, etc.) ainsi que notre dépôt Debian, Pour couronner le tout, nous avons un conteneur pour chacun de nos outils traditionnels : site web (Metalsmith), documentation (DocPad), blog (Dotclear), wiki, etc.

Comme vous pouvez le voir nos admins sont super-productifs et savent bien jongler avec les technos ! Et en plus ils s'entendent bien avec nos développeurs. Que demande le peuple ?

Jdh : Merci Frank.

Frank : Merci au Journal du Hacker que je suis toujours avec grand plaisir !

- Entretien réalisé par Carl Chenet pour le Journal du hacker.

Vus : 762
Publié par Journal du hacker : 419