- Le nouveau système de gestion de versions jj est un projet écrit en Rust, conçu pour compenser les limites de Git tout en permettant une adoption progressive
- En s’appuyant sur son expérience passée d’analyse du potentiel de croissance de Rust, l’auteur estime que jj présente un potentiel similaire en matière d’adéquation au marché, d’équipe spécialisée et de base d’utilisateurs
- jj reste compatible avec les dépôts Git tout en proposant un workflow plus simple, ce qui le rend particulièrement plus accessible aux développeurs peu familiers avec la structure interne de Git
- Son usage se répand déjà chez Google et Oxide, et une communauté passionnée ainsi qu’une équipe de développement dévouée sont en train de se former
- L’auteur rejoint ERSC, qui développe une plateforme de collaboration basée sur jj, avec l’intention de contribuer directement à la croissance de l’écosystème jj comme à l’époque des débuts de Rust
Pourquoi j’ai choisi Rust
- L’auteur s’est intéressé au langage après avoir vu sur Hacker News, à Noël 2012, la nouvelle “Rust 0.5 released”
- À l’époque, il était développeur Ruby on Rails, mais il s’intéressait déjà depuis l’université aux compilateurs et à la programmation système
- Pour évaluer les chances de succès de Rust, il a pris en compte trois éléments : l’adéquation au marché, l’équipe de développement et la base d’utilisateurs
- Il n’existait alors aucun langage crédible pour remplacer C/C++, et Rust proposait une approche innovante offrant la sécurité mémoire sans garbage collection
- Mozilla soutenait le projet et prévoyait d’introduire Rust dans Firefox, ce qui laissait penser qu’une base d’usage réelle pourrait émerger
- L’ambiance bienveillante et collaborative de la communauté Rust a aussi constitué un facteur d’attraction
- Par la suite, l’auteur a rédigé le tutoriel “Rust for Rubyists” et participé comme co-auteur à la documentation officielle
L’arrivée de jj
- jj (Jujutsu) n’est pas un langage de programmation, mais un nouveau système de gestion de versions (VCS) implémenté en Rust
- Il est compatible avec Git et peut être adopté progressivement tout en continuant à utiliser les dépôts existants
- L’auteur a commencé à explorer jj sur recommandation de Rain, une développeuse dont les goûts techniques sont proches des siens
- Rain a travaillé dans l’équipe de gestion du code source de Meta, et sa recommandation a donc été perçue comme un signal fiable
- En expérimentant jj pendant le week-end, il a lancé un projet de rédaction de tutoriel
- Comme lors de son apprentissage de Rust, il a choisi d’organiser ses idées en écrivant
- Au final, le tutoriel a reçu un accueil positif dans la communauté
Perspectives d’avenir pour jj
- L’auteur voit dans jj un schéma de croissance semblable à celui du Rust des débuts
- L’adéquation au marché, les capacités de l’équipe et le potentiel de diffusion auprès des utilisateurs lui semblent tous prometteurs
- Du point de vue de l’adéquation au marché, Git conserve une position dominante, mais jj peut gérer directement les dépôts Git, ce qui permet une adoption partielle
- Chez Oxide aussi, son usage s’est diffusé à partir de Rain, au point de susciter suffisamment d’intérêt pour créer un canal dédié
- jj est également utilisé en interne chez Google, ce qui est interprété comme un signal comparable à l’adoption de Rust par Mozilla
- Même dans les grands monorepos de Google (basés sur le backend Piper), certains projets utilisent déjà jj, ce qui constitue une forme de preuve sociale (social proof)
- Il existe une courbe d’apprentissage, mais pour les utilisateurs peu familiers avec la structure interne de Git, jj offre au contraire une utilisation plus intuitive et plus simple
- Les experts Git doivent s’adapter à de nouveaux concepts, tandis que les développeurs généralistes s’y habituent rapidement
- La communauté jj se développe dans une atmosphère passionnée et conviviale, qui rappelle celle des débuts de Rust
L’équipe et la communauté jj
- Le créateur, Martin, s’est consacré au développement de jj pendant de longues années ; récemment, le projet est passé d’un compte personnel à un compte d’organisation officiel, avec une gouvernance restructurée
- Les membres de l’équipe sont des experts disposant d’une solide expérience dans le développement d’outils de contrôle de source, ce qui leur donne de vrais atouts en matière d’orientation technique et de qualité
- La communauté grandit rapidement grâce à des retours actifs et à la collaboration, en recréant l’énergie positive de la communauté Rust des débuts
Nouveau défi : rejoindre ERSC
- L’auteur a décidé de quitter Oxide pour rejoindre la startup ERSC, qui développe une plateforme de collaboration basée sur jj
- Oxide était un excellent lieu de travail, mais le désir de s’impliquer plus profondément dans l’écosystème jj a été le facteur décisif
- ERSC prévoit de construire une plateforme de collaboration pour développeurs au-dessus de jj, et l’auteur évoque le cas de GitHub, qui avait démarré sous la raison sociale Logical Awesome, pour illustrer ce stade initial similaire
- Après avoir terminé son travail chez Oxide, l’auteur compte faire une pause, puis se consacrer à la communauté jj et à l’achèvement du tutoriel
- Il annonce davantage d’activité sur Discord, une série d’articles de blog et diverses contributions à la communauté
- Il considère 2025 comme un nouveau tournant et exprime sa gratitude de pouvoir relever un défi autour d’un projet qui le passionne vraiment
Conclusion
- L’auteur est convaincu que jj a le potentiel de reproduire la trajectoire de croissance de Rust
- Sa compatibilité avec Git, la possibilité d’une adoption progressive, une équipe dévouée et une communauté active en sont les principales raisons
- jj pourrait dépasser le simple statut d’outil pour devenir une plateforme d’innovation dans la manière dont les développeurs collaborent
- Le parcours de l’auteur, commencé avec Rust, entre désormais dans un nouveau chapitre avec jj
2 commentaires
On l’a déjà vu plusieurs fois, mais il faudrait quand même y jeter un œil.
Avis Hacker News
J’ai essayé sérieusement
jjune ou deux fois. Le concept de conflits de première classe est cool, mais en pratique je fais bien plus souvent du staging/commit que de la résolution de conflits. Venir demagitfait que le découpage et la sélection de hunks dansjjme semblent très inconfortables. Je rebase souvent, donc avec les raccourcis de rebase demagit, je profitais déjà de la plupart des avantages dejj. Pour quelqu’un comme moi,jjdevra nettement améliorer l’UX de sélection des hunks pour surpassermagitjj, c’est justement de ne pas penser en termes de staging ou de commit. Tout est un changement (change), et il faut raisonner en marquant le parent ou des ancêtres plus lointains avec un bookmark pour les squash dedans, ou en déplaçant le bookmark vers le changement suivantjjne me plaît pas. Surtout pour les débutants, je pense que trop masquer l’architecture interne n’aide pas à apprendremagit. Ça ne m’a pas semblé très différent de celle dejj. J’ai longtemps utilisé GitUp(gitup.co), et même si l’UX dejjn’est pas totalement naturelle, ça me paraît être un problème réglable via la personnalisation des raccourcisjjjj. Il faut simplement éviter les commandesjjqui modifientgit_head. J’utilise un alias pour commit les changements staged (exemple deconfig.toml)Chaque fois que je vois une alternative à Git, j’ai un léger réflexe luddite. Il y a déjà trop de langages, frameworks et outils. Au moins pour les VCS, je trouve rassurant d’avoir Git comme solution quasiment universelle.
jjrésoudra peut-être des problèmes, mais vu la charge pour le secteur de devoir supporter deux systèmes, je ne suis pas sûr que le bilan soit positifjjest une option que chaque développeur peut choisir individuellement. Un dépôtjjest un sur-ensemble d’un dépôt Git, donc les outils existants ne cassent passvn, où nous sommes d’abord passés à Git viagit-svn.jjsemble suivre une approche similaire. Même sans connaîtrejj, la CI et les outils existants continuent de fonctionnerjjassez révolutionnaire. Il faudrait plutôt un nouveau VCS qui suive les changements de manière atomique (atomic). Avec une telle structure, la notion de branche disparaîtrait, et l’état du dépôt pourrait être composé à partir de plans et d’atomes. Cela dit, basculer vers un tel système serait un défi immensegitest arrivé aprèsrcs,cvsetsvn, il finira lui aussi un jour par être remplacé par quelque chose de meilleurJ’ai essayé
jj, mais je suis habitué à Sublime Merge. Faire de la gestion de versions en CLI implique beaucoup de saisie répétitive et il est facile de perdre le fil de l’état courant. Avec une GUI, l’état reste toujours visible, et un clic suffit pour voir un diff ou saisir un message de commit. Je n’ai plus jamais envie de sélectionner des hunks au clavier.SMest vraiment agréable. J’aimerais que la GUI dejjprogresse, ou quejjsoit intégré àSMLa vraie nouvelle, c’est que des gens ont commencé à créer des choses comme « jjhub » (ersc.io)
jjhub» est une bonne première étape. On peut déjà utiliserjjavec GitHub, mais il faudra proposer quelque chose de réellement utile au-delà de çajj, et une RFC ajoutant le support des change ID de Jujutsu a été approuvéejjhubest franchement réussiOn dit que
jjse diffuse en interne chez Google, mais Google a tendance à changer périodiquement de VCS interne. Wrapper Git, version étendue de Mercurial, et maintenantjj: tout a changé en l’espace de 7 ansjjest innovant parce qu’il préserve l’identité (identity) d’un changement. Avec Git, après un rebase ou un amend, cela devient un commit complètement différent, alors qu’avecjj, cela continue d’être suivi comme le même changement. Cela dit,jjcontinuera probablement à utiliser Git comme backend de stockagejjva durer. J’aimerais utiliser le même workflow au travail et à la maison. C’est bien plus rapide que MercurialJe me demande si
jjgère mieux les gros fichiers binaires que Git. Dans le développement de jeux, Perforce reste toujours roi. Même avec LFS, Git ne suffit pas vraimentjjutilise Git comme stockage et ne prend pas en charge LFS, donc il a sur ce point les mêmes limites que GitJ’ai suivi le tutoriel Jujutsu pendant une journée environ, et j’ai trouvé ça plutôt bien. Mais j’avais l’impression qu’il manquait une pièce du puzzle. Par exemple, je me demandais si les change id étaient réellement utiles quand on ouvre une PR sur GitHub. J’imagine que cela révèle surtout sa vraie valeur avec le backend Piper interne à Google. Je suis curieux de voir le plan d’ERSC. Personnellement, je voudrais un workflow distribué avec revue de code hors ligne intégrée
jj. Par ailleurs, j’ai testé beads, un système qui met les issues dans le dépôt, et ça m’a plutôt bien plujjincluent un en-têtechange-id, donc même si GitHub ne connaît pasjj, les utilisateurs dejjpeuvent quand même suivre les rebases entre eux. On peut le vérifier avecgit cat-file -p HEADJ’utilise
jjsur des projets personnels depuis un à deux mois, et j’en suis assez satisfait. En revanche, lorsqu’on modifie une ancienne révision, un fichier nouvellement ajouté à.gitignorepeut se retrouver inclus par erreur. À part ça, c’est bien. Cela dit, j’ai encore bien plus de connaissances sur Git, donc je compte l’introduire doucement aussi au travailJ’ai rejoint cette année l’entreprise Sapling/Subversion, donc je n’ai pas encore essayé
jj. Cela dit, Sapling est bien plus intuitif, et des piles de commits sont plus faciles à comprendre que des branches. Je me demande toutefois ce que ça donne sans un support comme l’interface de revue de Meta. Ce genre de projet est vraiment nécessairejjsont des projets compagnons qui vont dans la même directionQuel que soit le nom, East River Source Control est vraiment un excellent nom