I wrote a script that lists the number of dependents for each package in Guix by traversing the package graphs:
https://gist.github.com/mbakke/f354272666fbef09c5229f7b85377...
Running it takes about 16 seconds on my laptop, and piping to 'grep -v bootstrap | sort -rn | tail -n 20' gives:
16695 guile
16692 ld-wrapper
14686 pkg-config
14512 perl
14444 ncurses
13135 readline
13133 zlib
13022 libffi
12470 xz
12448 libunistring
12433 openssl
12353 bash
12050 libxml2
12016 gettext-minimal
11950 tar
11942 bzip2
11896 expat
11857 tzdata
11850 net-base
11846 python-minimal
(GCC, glibc and binutils are missing for complicated reasons, but should be up there with Guile)By changing (all-packages) on line 26 to:
(fold-packages (lambda (package result)
(if (string-prefix? "python-" (package-name package))
(cons package result)
result))
'()))
We get the most popular Python projects: 6672 python-setuptools-scm
6667 python-nose
6662 python-pyparsing
6662 python-more-itertools
6661 python-wcwidth
6660 python-py
6660 python-pluggy
6660 python-atomicwrites
6657 python-six
6593 python-mock
6587 python-appdirs
6586 python-lxml
6584 python-filelock
6584 python-distlib
6583 python-sortedcontainers
6580 python-hypothesis
6577 python-elementpath
6576 python-xmlschema
6575 python-pytest
6303 python-libxml2
This approach misses "end user" packages such as browsers and QEMU, but provides some insight into high value targets.For end user packages, Debians "popularity contest" can be useful:
source-only distros include macports, gentoo, and so on.
The graphs I'm traversing are the build-time dependency graph of all packages. I could also traverse run-time dependency graphs, but then I'd need to actually build all the things, because those are not known up-front unlike Gentoo and Macports.
The reason the toolchain is missing is because it is an "implicit input" as opposed to a "normal" input, so it's invisible/transparent to the query I'm making.
A lot of critical infrastructure software is not active and not often spoken about!
Case in point: The https://www.cip-project.org/faq project highlight the needs of very-long-term support for OS components that run on critical infrastructure such as power stations.
The https://www.cip-project.org/faq project is based on Debian. Very little of it is on github.
With one of my open source projects I've got to extreme lengths to test it under a huge number of compiler configurations, so it compiles on anything with no warnings. I get nearly zero bugs filed when people port it to esoteric platforms.
When randomly searching a while back, I found a blog post someone wrote about getting my project running on Arduino [1], something I had never tried. Turns out they just had to set some configuration flags and everything worked fine. They therefore filed zero bugs, and it resulted in zero activity for my project. They didn't even tell me about it!
I was extremely pleased that it worked of course, but disappointed that my project continues to look like it's dead. I imagine Google's criticality score for my project is near zero.
[1]: https://www.thingforward.io/techblog/2017-08-03-compiling-lu...
by counting the numbers it becomes pretty blindingly obvious what the critical dependencies are. as mentioned in another post above, bash and glibc6 are blindingly-obviously high on the list... yet the GNU Project receives an unbelievably low amount of funding despite their critical importance.
likewise, this particular bug in binutils ld, which centres around the incredibly short-sighted "4GB should be enough for anyone" removal of Dr Stallman's memory-resident algorithms in the late 90s, is having some very serious consequences:
https://sourceware.org/bugzilla/show_bug.cgi?id=22831
yet because there's no money not even from redhat nobody's looking at it.
likewise: PAM no longer has a proper maintainer, and hasn't had for... a decade?
these are projects that people are relying on yet completely forgetting they're a critical part of the infrastructure!
why? because, just as rhencke said above: they're not on github, they've not got "unnecessary changes" which are counted as "activity to be glorified and worshipped".
abharya: i heard on slashdot the intent to start from github, to exclusively focus on github. this will turn out to be a serious mistake.
* Critical projects may have very little activity/maintenance. For example, Bash 4.0 to Bash 5.0 was only 123 commits over 8 years. But, Bash is a absolutely a critical project (ask any org about how much work they had to do when affected by https://en.wikipedia.org/wiki/Shellshock_(software_bug) ).
* A measure of criticality should understand _as many of the various forms of dependence on software_ that may occur that it can. Dependencies can take many forms, such as:
a package manager resolving a dependency
a user purchasing a mobile phone with software pre-installed
a user visiting a website (react/jquery/etc)
etc.
* Criticality should understand if, how, and when dependencies are updated. For example, fixing a bug in Chrome and distributing that fix to 80% of users in 1 week is feasible. Fixing a bug in Bash and distributing that fix to 80% of users in 1 week is not so feasible.
i mentioned in another post: github "glorifies" the person and the changes that they make. "look at mee! look at mee! i'm making a commit! i'm wiping my backside now! aren't i great!" which gets you precisely zip in terms of actual strategic value.
changes measure change.
people will tell you - if you let them - by providing you with the information needed to make a qualitative assessment.
so.
provide a type of wiki/website that allows qualitative assessments to be made, on a per-library / per-project basis. then put the metrics (the "criticality value") onto that.
pre-seed that wiki/website with stuff from github if you feel so inclined but DO NOT limit the wiki/website to exclusively github. i repeat again: doing so would be a disastrous mistake.
unfortunately, as legal advice, those google employees (right the way to management) do not have the backbone to say, "err no actually, GPL-licensed code is the critically strategically important leveller that forces aberrant companies to collaborate rather than sponge off of underfunded projects".
Did i forget military, e.g. weapons?
One exception is inductive automation ignition HMI which uses java
I seriously hope no actual decisions about resource allocation etc are made based on this.
A few of your top-10 I can agree with, but when you’re saying a home-automation package (“core”) is more critical than something like pytz then something has gone terribly wrong.
So a highly dependent project that has plenty of support for its needs should not need to be brought to anyone's attention. I'm guessing python, llvm, clang, chromium, webkit, C#, visual studio code, off the top of my head are all well funded and supported open source projects.
I don't know what good examples of under supported but critical open source projects are. I guess I've read that OpenSSL was massively under supported but apparently the solution chosen was to throw it under the bus and promote libssl or boringssl or something like that (completely out of my expertise)
That algorithm seems unnecessarily complicated and includes somewhat dubious metrics when, in my mind, the only thing that really "counts" when it comes to "criticality" are "how many other things use/depend on me", and there are much easier ways to determine this:
1. For languages with a common package repo, how many other packages depend on me? With NPM, for example, it's pretty easy to figure out how many other packages depend on a given package.
2. For "top level" projects, look at downloads.
My guess is just looking at either (or both) of those metrics would give you better results.