servers.minetest.net statistics
10 days (1st May 2020 -- 10th May 2020)
Only server list fetches were counted.

General stats
-------------
total: 4007372

IPv4 -> 3273574 81.69%
IPv6 -> 733798  18.31%

Browser -> 161866  04.04%
Game    -> 3845506 95.96%

Game stats
----------
total: 2753281
unique (by IP): 1053455

Minetest (or identifies as such):
5.3 (dev)      -> 5081    00.18%
5.2            -> 102614  03.73%
5.1            -> 36649   01.33%
5.0            -> 2332930 84.73%
0.4.17         -> 14399   00.52%
0.4.16         -> 22520   00.82%
0.4.15         -> 5319    00.19%
0.4.14         -> 328     00.01%
0.4.13         -> 112318  04.08%
0.4.12         -> 41      00.00%
gUnknown       -> 41      00.00%
0.4.11         -> 1871    00.07%
0.4.10         -> 102     00.00%
0.4.9          -> 100     00.00%
0.4.8          -> 0       00.00%

Third party (only those with >1000 total):
MultiCraft 1.3    -> 18177 00.66%
	based on 0.4.17
MultiCraft 1.1.10 -> 36525 01.33%
	based on 0.4.17
MultiCraft 1.1.8  -> 4889  00.18%
	based on 0.4.16
MultiCraft 1.1.4  -> 14926 00.54%
	based on 0.4.14
MobilCraft        -> 7285  00.26%
	based on 0.4.14
FreeCraft         -> 1636  00.06%
	based on 0.4.15
Shpere            -> 1421  00.05%
	based on ?

other/unknown     -> 31637 01.15%

Market share of select forks:
Minetest   -> 2636244 95.75%
Freeminer  -> 2       00.00%
MultiCraft -> 75058   02.73%
MobilCraft -> 7285    00.26%

Note about 0.4.13:
	There seems to be a popular (new?) iOS app that is based on 0.4.13...
	Breakdown: 102770 iOS (91%), 7265 Android (6%), 2283 Desktop (2%)

Note about gUnknown:
	This "version" exists since 0.4.11 for Android: https://github.com/minetest/minetest/commit/d38f6eb
	That means all "gUnknown" clients are on Android and run 0.4.11 or newer.

Note about MultiCraft:
	Since version 1.2.1 (May 2019) MultiCraft has its own server list.
	Since 1.5.0 (Sept 2019), it no longer fetches Minetest's list and always uses its own.

Note about other/unknown:
	Technically some of these could be Minetest 0.4.7 or older, but I doubt that.
	This section is mostly curl/wget/no user agent and the rest of
	irrelevant Android forks (about 60).

Third party store links:
	MultiCraft    -- https://apps.apple.com/app/multicraft-build-and-mine/id1174039276
	MobilCraft    -- https://play.google.com/store/apps/details?id=com.MobileCraft
	FreeCraft     -- no longer listed in Play Store(?)
	Freeminer     -- no longer listed in Play Store (since a long time)

Effective version distribution
------------------------------
based on prev. section

5.3             -> 5081    00.18%
5.2             -> 102614  03.73%
5.1             -> 36649   01.33%
5.0             -> 2332930 84.73%
0.4.17          -> 69101   02.51%
0.4.16          -> 27409   01.00%
0.4.15          -> 6955    00.25%
0.4.14          -> 22539   00.82%
0.4.13          -> 112318  04.08%
0.4.12 or older -> 2155    00.08%
unknown         -> 35530   01.29%

series 5.x      -> 2477274 89.98%
series 0.4.x    -> 240477  08.73%

Protocol versions
-----------------
total: 2723674

By maximum version:
v39    -> 105624  03.88%
v38    -> 37477   01.38%
v37    -> 45985   01.69%
v36    -> 2289570 84.06%
v35    -> 43      00.00%
v34    -> 5       00.00%
v33    -> 1669    00.06%
v32    -> 113483  04.17%
v31    -> 1       00.00%
v30    -> 3668    00.13%
v29    -> 0       00.00%
v28    -> 4068    00.15%
v27    -> 117526  04.31%
v26    -> 2413    00.09%
v25    -> 216     00.01%
v24    -> 1912    00.07%

By supported range:
v39    -> 105638  03.88%
v38    -> 143115  05.25%
v37    -> 189100  06.94%
v36    -> 2289794 84.07%
v35    -> 267     00.01%
v34    -> 272     00.01%
v33    -> 1941    00.07%
v32    -> 115424  04.24%
v31    -> 115425  04.24%
v30    -> 119093  04.37%
v29    -> 119093  04.37%
v28    -> 123161  04.52%
v27    -> 240687  08.84%
v26    -> 243100  08.93%
v25    -> 243316  08.93%
v24    -> 124163  04.56%

Note on the versions:
	The maximum of 0.4.17 is v32, the minimum of 5.0 is v37.
	Versions 33 until 36 were never released (dev builds only).

Platform stats
--------------
total: 2723279

x86      -> 14606   00.54%
x86_64   -> 185479  06.81%
armv6/7l -> 1084202 39.81%
aarch64  -> 1438957 52.84%
???      -> 16      00.00%

Desktop -> 200199  07.35%
Mobile  -> 2523080 92.65%

Linux   -> 2528675 92.85%
Windows -> 71381   02.62%
Darwin  -> 122844  04.51%
*BSD    -> 355     00.01%
???     -> 24      00.00%

Note about Desktop vs. Mobile:
	All ARM devices are counted as mobile *unless* their Linux kernel version
	can be reliably identified as a desktop distribution.

Windows stats
-------------
total: 71381

Windows 10       -> 52243 73.19%
Windows 8(.1)    -> 6602  09.25%
Windows 7        -> 11092 15.54%
Windows Vista    -> 517   00.72%
Windows XP       -> 927   01.30%
older            -> 0     00.00%

Mobile stats
------------
total: 2523080

Android -> 2405548 95.34%
iOS     -> 117532  04.66%

iOS stats
---------
total: 117532

iPad   -> 55040 46.83%
iPhone -> 62248 52.96%
iPod   -> 244   00.21%

+======================+
| big pile of commands |
+======================+
tail -n 5160000 /usr/local/nginx/logs/serverlist.log | grep "GET /list" > serverlist_10days.log
wc -l serverlist_10days.log

cat serverlist_10days.log | awk '{ if($1 !~ ":") print $0 }' | wc -l
cat serverlist_10days.log | awk '{ if($1 ~ ":") print $0 }' | wc -l
##
cat serverlist_10days.log | egrep -c "Mozilla|Opera"
cat serverlist_10days.log | egrep -c -v "Mozilla|Opera"

cat serverlist_10days.log | egrep -v "Mozilla|Opera" | ./wwwuniq.py game.log
##
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/5\.3"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/5\.2"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/5\.1"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/5\.0"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.17"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.16"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.15"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.14"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.13"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.12"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/gUnknown"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.11"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest/0\.4\.10"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest[/ ]0\.4\.9"
cat game.log | cut -d '"' -f 6-7 | egrep -c "^Minetest 0\.4\.8"
##
cat game.log | cut -d '"' -f 6-7 | egrep "^MultiCraft/" | cut -d " " -f 1 | \
	cut -d "-" -f 1 | sort | uniq -c | sort -n
cat game.log | cut -d '"' -f 6-7 | egrep -v "^(Minetest|MultiCraft)" | \
	cut -d "/" -f 1 | sort | uniq -c | sort -n
python3 -c 'import sys;print(sum(int(l.strip().split(" ")[0])for l in sys.stdin))'
#
cat game.log | cut -d '"' -f 6-7 | sed -r 's|^([^ /"]+).*"|\1|g' | \
	sort | uniq -c | sort -n

calc.exe
##
calc.exe

cat game.log | sed -rn 's|.*\?proto_version_min=([0-9]+)&proto_version_max=([0-9]+).*|\1 \2|gp' > proto.log
wc -l proto.log
##
for i in $(seq 39 -1 24); do
	printf "v$i    -> %-7d\n" $(grep -c " $i\$" proto.log)
done
##
for i in $(seq 39 -1 24); do
	printf "v$i    -> %-7d\n" $(awk "{ if($i >= \$1 && $i <= \$2) print $0 }" proto.log | wc -l)
done

cat game.log | cut -d '"' -f 6-7 | egrep "\(\S+ \S+\)\"" > newer.log
cat newer.log | cut -d '(' -f 2 | cut -d ')' -f 1 | \
	sed -re 's/i(Phone([6-9]|1[012])|Pad([4-9]|1[01])|Pod[79]),[0-9]+/aarch64/' | \
	sed -re 's/i(Phone|Pad|Pod)[0-9],[0-9]/armv7l/' > archs.log
wc -l newer.log
##
cat archs.log | egrep -c "(x86|i[3-6]86)$"
cat archs.log | egrep -c "(x86_64|amd64)$"
cat archs.log | egrep -c "armv[67]l?$" 
cat archs.log | egrep -c "(aarch64|armv8l?)$"
cat archs.log | egrep -c "(x86|i[3-6]86|x86_64|amd64|armv[678]l?|aarch64)$" | wc -l
##
cat archs.log | egrep "(armv[678]l?|aarch64)$" | \
	egrep -v "^Linux/.*(-ARCH|-MANJARO|-raspi2?|-rockchip64)" | wc -l
calc.exe
##
cat newer.log | cut '-d(' -f2 | cut '-d/' -f1 | sort | uniq -c | sort -n
calc.exe

cat newer.log | cut '-d(' -f2 | grep "Windows" | cut -d '/' -f2 | cut -d ' ' -f1 > winvers.log
wc -l winvers.log
##
cat winvers.log | grep -c "^10\.0"
cat winvers.log | grep -c "^6\.[23]"
cat winvers.log | grep -c "^6\.1"
cat winvers.log | grep -c "^6\.0"
cat winvers.log | grep -c "^5\.[12]"
cat winvers.log | egrep -v "^(5\.[12]|6\.[0-3]|10\.0)" | wc -l

cat newer.log | cut -d '(' -f 2 | cut -d ')' -f 1 | \
	sed -re 's/i(Phone([6-9]|1[012])|Pad([4-9]|1[01])|Pod[79]),[0-9]+/aarch64_apple/' | \
	sed -re 's/i(Phone|Pad|Pod)[0-9],[0-9]/armv7l_apple/' | \
	egrep "armv[678]l?|aarch64" | \
	egrep -v "^Linux/.*(-ARCH|-MANJARO|-raspi2?|-rockchip64)" > mobile.log
wc -l mobile.log
##
cat mobile.log | grep -c -v "_apple"
cat mobile.log | grep -c "_apple"

cat newer.log | cut '-d(' -f2 | cut '-d)' -f1 | grep -c iPhone
cat newer.log | cut '-d(' -f2 | cut '-d)' -f1 | grep -c iPad
cat newer.log | cut '-d(' -f2 | cut '-d)' -f1 | grep -c iPod