Nubo, un nuage auto-hébergé

Aucune des solutions existantes de partage de fichiers ne me satisfait. Google Drive, Dropbox, iCloud et dans une moindre mesure les solutions open source comme ownCloud, toutes souffrent des mêmes limitations qui les rendent peu adaptées à mon cas d’usage personnel.

  • Pas de chiffrement de bout en bout. L'envoi et la réception des fichiers sont chiffrés, ne serait-ce que par HTTPS, mais le stockage sur les serveurs ne l'est pas. L'opérateur du service a donc accès à vos données. Ainsi qu'un éventuel hacker. Ou un quidam qui rachèterait aux enchères les serveurs après liquidation judiciaire de l'hébergeur (c'est du vécu).
  • Corollaire du problème précédent, la plupart des opérateurs imposent des conditions d'utilisation problématiques. Ils peuvent par exemple s'autoriser à analyser vos contenus pour vendre de la publicité ciblées, ou bien prétendre à des droits d'utilisation ou de reproduction de vos propres données. Par ailleurs, beaucoup de ces services sont situés aux USA, où depuis le Patriot Act l'État a légalement accès à toutes les données entrant sur son territoire. Or on sait que ce droit est détourné pour le renseignement et l’espionnage économique. Cela rend le service inadapté à un usage professionnel, surtout si vous travaillez dans un secteur sensible ou concurrentiel.
  • Synchronisation en continu. Ça semble être un avantage, mais un réalité, je trouve ça plutôt ennuyeux. Comme tout professionnel de l’informatique, quand je travaille sur un fichier, je le sauvegarde à peu près toutes les trente secondes. C'est encore pire avec Xcode qui enregistre sans arrêt ses informations de configuration. Chacune de ces écritures déclenche une synchronisation inutile avec le cloud, et c'est d'autant plus gênant que les fichiers concernés sont volumineux.
  • Pas de support des alias ou des liens symboliques. Pour partager un fichier, vous devez le copier dans le répertoire qui est synchronisé avec le cloud. Du coup, vous vous retrouvez avec deux copies de votre fichier, une à l'emplacement habituel, rangé dans vos dossiers personnels, et l'autre sur le drive partagé. À quoi bon utiliser un cloud pour synchroniser des fichiers entre plusieurs machines si cela vous oblige ensuite, sur chacune de ces machines, à synchroniser des copies de ces fichiers entre plusieurs répertoires ?
  • Pas de possibilité d'exclure des fichiers. Or il y a plein de raisons de ne pas vouloir synchroniser certains fichiers d'un drive partagé : les fichiers temporaires, par exemple des fichiers .o résultants de la compilation de fichiers .c ; les fichiers que vous voulez partager entre deux machines personnelles A et B mais pas avec une machine professionnelle C ; ou encore fichiers qui n'ont de sens que localement, comme les .DS_Store de macOS, les thumbs.db de Windows, les .stack-work et .cabal-sandbox de Haskell, et même les .git, qui sont très volumineux et induisent des comportements bizarres de Git s'ils sont transférés entre machines.
  • Pas de possibilité d'avoir plusieurs drives sur la même machine. Beaucoup de ces applications de cloud n'ont qu'une configuration globale, et non une configuration par répertoire. Vous ne pouvez donc avoir qu'un seul compte et un seul répertoire synchronisé à la fois. Impossible d'avoir un drive pour partager avec les collègues et un autre pour partager avec ses amis, par exemple.

Pour lever ces limitations, j’ai donc développé ma propre solution. La v1 a été développée à l’arrache au printemps dernier, pour répondre à des besoins urgents. Je l’ai utilisée quelques mois, ce qui m’a permis d’en préciser les manques et d’essuyer quelques plâtres. (Vous le saviez, vous, que macOS et Linux n’encodent pas les caractères accentués de la même manière alors qu'ils sont censé être Unicode ?) Puis j’ai décidé de faire une v2 plus complète, plus fiable, mieux polie, et surtout, de la partager.

Ça s’appelle nubo, ce qui veut dire nuage en espéranto, et ça se passe par là.

Côté serveur, le cloud est constitué d’une application minimaliste qui devrait pouvoir s’installer sur tout hébergement supportant PHP 7 et de préférence accessible en HTTPS. (Je ne suis pas développeur web, que les spécialistes soient indulgents…)

Côté client, c’est un petit utilitaire en ligne de commande qui permet de paramétrer le système, puis de déclencher ensuite les synchronisations entre la machine locale et le cloud. Ce client est développé en Haskell, un choix qui s’explique d’abord par mon goût personnel, mais aussi par le besoin de portabilité : le même code tourne sous macOS et Linux, et avec quelques précautions, sous Windows. (C’est mon premier vrai gros projet en Haskell, que les spécialistes soient indulgents aussi…)

N’hésitez pas à me faire des retours !