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
2. Org
2.2. Commits
2.3. Changes
2.4. LOC survival
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": []
}