Emacs Community
The current state of affairs of emacs development
Inspired by On the Graying of GNOME, I thought I’d do some analysis of Emacs and Org’s commit history, to try to gauge the health of their developer communities.
For fun I’ve also thrown in git-of-theseus for the (code) survival plots.
1. Emacs
1.2. Commits
1.3. Changes
1.4. LOC survival
![emac-survival-plot.png](figures/EmacsCommunity/emac-survival-plot.png)
2. Org
2.2. Commits
2.3. Changes
2.4. LOC survival
![org-survival-plot.png](figures/EmacsCommunity/org-survival-plot.png)
3. Methodology
Shell Script
sudo python3 -m pip install git-of-theseus git clone https://github.com/hpjansson/fornalder.git /tmp/fornalder cd /tmp/fornalder cargo build --release # Emacs git clone https://github.com/emacs-mirror/emacs.git /tmp/emacs cd /tmp/emacs git-of-theseus-analyze . git-of-theseus-stack-plot authors.json git-of-theseus-survival-plot --exp-fit survival.json /tmp/fornalder/fornalder --meta emacs-meta.json ingest db.sqlite . /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit authors db.sqlite authors-y.png\ /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit commits db.sqlite commits-y.png\ /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit changes db.sqlite changes-y.png\ /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit authors --interval month db.sqlite authors-m.png\ /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit commits --interval month db.sqlite commits-m.png\ /tmp/fornalder/fornalder --meta emacs-meta.json plot --unit changes --interval month db.sqlite changs-m.png # Org git clone https://code.orgmode.org/bzg/org-mode.git /tmp/orgmode cd /tmp/orgmode git-of-theseus-analyze . git-of-theseus-stack-plot authors.json git-of-theseus-survival-plot --exp-fit survival.json /tmp/fornalder/fornalder --meta org-meta.json ingest db.sqlite . /tmp/fornalder/fornalder --meta org-meta.json plot --unit authors db.sqlite authors-y.png\ /tmp/fornalder/fornalder --meta org-meta.json plot --unit commits db.sqlite commits-y.png\ /tmp/fornalder/fornalder --meta org-meta.json plot --unit changes db.sqlite changes-y.png\ /tmp/fornalder/fornalder --meta org-meta.json plot --unit authors --interval month db.sqlite authors-m.png\ /tmp/fornalder/fornalder --meta org-meta.json plot --unit commits --interval month db.sqlite commits-m.png\ /tmp/fornalder/fornalder --meta org-meta.json plot --unit changes --interval month db.sqlite changs-m.png
3.1. emacs-meta.json
Javascript
{ "name": "Emacs", "first_year": 1985, "markers": [ { "time": { "year": 1985, "month": 12 }, "row": 0, "text": "▼ Emacs 17" }, { "time": { "year": 1987, "month": 3 }, "row": 1, "text": "▼ Emacs 18" }, { "time": { "year": 1993, "month": 5 }, "row": 0, "text": "▼ Emacs 19" }, { "time": { "year": 1997, "month": 9 }, "row": 0, "text": "▼ Emacs 20" }, { "time": { "year": 2001, "month": 10 }, "row": 0, "text": "▼ Emacs 21" }, { "time": { "year": 2007, "month": 6 }, "row": 0, "text": "▼ Emacs 22" }, { "time": { "year": 2009, "month": 8 }, "row": 1, "text": "▼ Emacs 23" }, { "time": { "year": 2012, "month": 6 }, "row": 0, "text": "▼ Emacs 24" }, { "time": { "year": 2016, "month": 9 }, "row": 0, "text": "▼ Emacs 25" } ], "domains": [] }
3.2. org-meta.json
Javascript
{ "name": "Org", "first_year": 2008, "markers": [ { "time": { "year": 2008, "month": 4 }, "row": 0, "text": "▼ Org 6" }, { "time": { "year": 2010, "month": 6 }, "row": 0, "text": "▼ Org 7" }, { "time": { "year": 2013, "month": 4 }, "row": 0, "text": "▼ Org 8" }, { "time": { "year": 2016, "month": 11 }, "row": 0, "text": "▼ Org 9" } ], "domains": [] }