From 18e3020a3bb240c56a201066efdef95590613c6f Mon Sep 17 00:00:00 2001 From: humanacollaborator Date: Sat, 3 Apr 2021 16:13:44 -0400 Subject: [PATCH] add forges comparison table --- forge_comparison.md | 37 ++++++++++ github.md | 2 + input_data/forges.sql | 45 ++++++++++++ tools/gen_forge_table.sh | 151 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 235 insertions(+) create mode 100644 forge_comparison.md create mode 100644 input_data/forges.sql create mode 100755 tools/gen_forge_table.sh diff --git a/forge_comparison.md b/forge_comparison.md new file mode 100644 index 0000000..3b5e236 --- /dev/null +++ b/forge_comparison.md @@ -0,0 +1,37 @@ +[//]: # (** DO NOT EDIT this file directly! ** It is auto-generated. Changes should be made to financial_institutions.sql or gen_forge_table.sh instead.) + +# Directory of forges +## Whitelist + +The following forges have no significant ethical issues: + +| *forge* | *registration publicly open* | *software* | *Tor-hostile* | *sensitive info exposed to CloudFlare* | *forced re/hCAPTCHA* | *forced execution of non-free software* | *notes* | +|---|---|---|---|---|---|---|---| +[๐Ÿง…](http://githidep2hynhdmutuv7n2tei4iie2c7lyqz5fes3r5zzoxe5dshtxyd.onion)|๐Ÿ’€|gitea|n|n|n|n|**dead site**| +[framagit.org](https://framagit.org)|๐ŸŸข|Gitlab (CE)|n|n|n|n|| +[git.fuwafuwa.moe](https://git.fuwafuwa.moe)[๐Ÿง…](http://git.fuwafuwaqtlkkxwc.onion)|๐ŸŸข|gitea|n|n|n|n|SSH over Tor broken; HTTPS over Tor works| +[git.hardenedbsd.org](https://git.hardenedbsd.org)|๐ŸŸข|Gitlab (CE)|n|n|n|n|possibly restricted to BSD efforts| +[git.jami.net](https://git.jami.net)|๐ŸŸข|Gitlab (CE)|n|n|n|n|possibly restricted to Jami efforts| +[git.nixnet.services](https://git.nixnet.services)|๐Ÿ”ด|gitea|n|n|n|n|used to be git.nixnet.xyz| +[git.sdf.org](https://git.sdf.org)|๐ŸŸข|gitea|n|n|n|n|SSH over Tor broken (try HTTPS over Tor)| +[git.slashdev.space](https://git.slashdev.space)|๐ŸŸข|gitea|n|n|n|n|SSH over Tor broken (try HTTPS over Tor)| +[git.teknik.io](https://git.teknik.io)|๐Ÿ”ด|gitea|n|n|n|n|| +[gitlab.freedesktop.org](https://gitlab.freedesktop.org)|๐ŸŸข|Gitlab (CE)|n|n|n|n|possibly restricted to Freedesktop efforts| +[gitlab.gnome.org](https://gitlab.gnome.org)|๐ŸŸข|Gitlab (CE)|n|n|n|n|possibly restricted to Gnome efforts| +[gitlab.torproject.org](https://gitlab.torproject.org)|๐ŸŸข|Gitlab (CE)|n|n|n|n|open registration; repo creation possibly restricted; Google reCAPTCHA is [allegedley](https://lists.gnu.org/archive/html/repo-criteria-discuss/2021-03/msg00000.html) used, but [not at registration time](https://gitlab.onionize.space)| +[libregit.org](https://libregit.org)|๐Ÿ”ด|gitea|n|n|n|n|reg by invite only| +[source.puri.sm](https://source.puri.sm)|๐ŸŸข|Gitlab (CE)|n|n|n|n|open registration; *not* restricted to puri.sm efforts; no CAPTCHA (confirmed March 2021)| +[source.small-tech.org](https://source.small-tech.org)|๐Ÿ”ด|Gitlab (CE)|n|n|n|n|| +[sr.ht](https://sr.ht)|๐ŸŸข|gitea|n|n|n|n|javascript-free| +[yerbamate.dev](https://yerbamate.dev)|๐Ÿ’€|gitea|n|n|n|n|**dead site**| + +## Blacklist + +These forges have severe ethical or trust issues and should be boycotted: + +| *forge* | *registration publicly open* | *software* | *Tor-hostile* | *sensitive info exposed to CloudFlare* | *forced re/hCAPTCHA* | *forced execution of non-free software* | *notes* | +|---|---|---|---|---|---|---|---| +git.feneas.org|๐ŸŸข|Gitlab (CE)|n|n|โš’|โ˜ฃ|**forced h/reCAPTCHA**; reCAPTCHA impedes registration| +git.openprivacy.ca|โ›” (exclusive walled garden)|gitea|๐Ÿ‘|n|n|n|Tor users get 404 - suspected botnet; [listed](https://codeberg.org/crimeflare/cloudflare-tor/src/branch/master/cloudflare_users/cloudflare_supporter.txt) as a Cloudflare supporter| +gitlab.com|โ›” (exclusive walled garden)|Gitlab (EE)|n|๐ŸŒฉ|โš’|โ˜ฃ|**forced h/reCAPTCHA**; flagship instance running the *Enterprise Edition*; uses hCAPTCHA; heavily restricted with discriminatory policies| + diff --git a/github.md b/github.md index 9260621..b0c559f 100644 --- a/github.md +++ b/github.md @@ -45,6 +45,7 @@ [42]: http://techrights.org/2017/03/15/still-using-patents-to-coerce [43]: http://techrights.org/2017/02/27/microsoft-novell-v2-via-azure [44]: https://www.gnu.org/software/repo-criteria-evaluation.html +[45]: https://ilyaigpetrov.medium.com/github-shadowbans-anti-censorship-coder-account-for-a-link-to-the-christchurch-shootings-video-c79a80b408a9 # Direct practical problems with using Microsoft Github @@ -74,6 +75,7 @@ And for those not discouraged by that, [the sign-in page][6] is also broken. 1. MS suppresses democracy by [blocking][7] Github access to a project that facilitates protests in Catalonia. + MS also [banned][45] the account of an anti-censorship developer. 1. Free software projects that rely on non-free software "[put everyone at the whim of the groups and individuals who produce the tools they depend on][8]," and it puts free software developers in a position of hypocrisy. diff --git a/input_data/forges.sql b/input_data/forges.sql new file mode 100644 index 0000000..23fb86a --- /dev/null +++ b/input_data/forges.sql @@ -0,0 +1,45 @@ +create table if not exists forgesTbl (url_clrnet text, + url_onion text, + software text check(software in ('Gitea', 'gitlab_ce', 'gitlab_ee', 'Gogs', 'Sourcehut', 'other')) not null default 'other', + lst_kind text check(lst_kind in ('black', 'gray', 'white')) not null default 'white', + hrecaptcha text check(hrecaptcha in ('unavoidable', 'non-essential tasks', 'never')) not null default 'never', + dead boolean not null default 0, + openpubreg boolean not null default 1, + cflogin boolean not null default 0, + antitor boolean not null default 0, + forced_nfsw boolean not null default 0, + aws boolean not null default 0, + notes text, + primary key (url_clrnet,url_onion)); + +insert into forgesTbl (url_clrnet, dead) values ('https://yerbamate.dev',1); +insert into forgesTbl (url_clrnet, antitor, notes) values ('https://git.openprivacy.ca',1,'Tor users get 404 - suspected botnet; [listed](https://codeberg.org/crimeflare/cloudflare-tor/src/branch/master/cloudflare_users/cloudflare_supporter.txt) as a Cloudflare supporter'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://sr.ht','Sourcehut', 'javascript-free'); +insert into forgesTbl (url_onion, dead) values ('http://githidep2hynhdmutuv7n2tei4iie2c7lyqz5fes3r5zzoxe5dshtxyd.onion', 1); + +/* Gitea */ +insert into forgesTbl (url_clrnet, software, openpubreg, notes) values ('https://git.nixnet.services','Gitea', 0, 'used to be git.nixnet.xyz'); +insert into forgesTbl (url_clrnet, software, openpubreg) values ('https://git.teknik.io','Gitea',0); +insert into forgesTbl (url_clrnet, url_onion, software, notes) values ('https://git.fuwafuwa.moe','http://git.fuwafuwaqtlkkxwc.onion','Gitea','SSH over Tor broken; HTTPS over Tor works'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://git.slashdev.space','Gitea','SSH over Tor broken (try HTTPS over Tor)'); +insert into forgesTbl (url_clrnet, software, openpubreg, notes) values ('https://libregit.org','Gitea',0,'reg by invite only'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://git.sdf.org','Gitea','SSH over Tor broken (try HTTPS over Tor)'); + +/* Gitlab */ +insert into forgesTbl (url_clrnet, software) values ('https://framagit.org','gitlab_ce'); +insert into forgesTbl (url_clrnet, software, hrecaptcha, notes) values ('https://git.feneas.org','gitlab_ce','unavoidable','reCAPTCHA impedes registration'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://git.hardenedbsd.org','gitlab_ce','possibly restricted to BSD efforts'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://git.jami.net','gitlab_ce','possibly restricted to Jami efforts'); +insert into forgesTbl (url_clrnet, software, cflogin, hrecaptcha, notes) values ('https://gitlab.com','gitlab_ee',1,'unavoidable','flagship instance running the *Enterprise Edition*; uses hCAPTCHA; heavily restricted with discriminatory policies'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://gitlab.freedesktop.org','gitlab_ce','possibly restricted to Freedesktop efforts'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://gitlab.gnome.org','gitlab_ce','possibly restricted to Gnome efforts'); +insert into forgesTbl (url_clrnet, software, hrecaptcha, notes) values ('https://gitlab.torproject.org','gitlab_ce','non-essential tasks','open registration; repo creation possibly restricted; Google reCAPTCHA is [allegedley](https://lists.gnu.org/archive/html/repo-criteria-discuss/2021-03/msg00000.html) used, but [not at registration time](https://gitlab.onionize.space)'); +insert into forgesTbl (url_clrnet, software, notes) values ('https://source.puri.sm','gitlab_ce','open registration; *not* restricted to puri.sm efforts; no CAPTCHA (confirmed March 2021)'); +insert into forgesTbl (url_clrnet, software, openpubreg) values ('https://source.small-tech.org','gitlab_ce',0); + +update forgesTbl set forced_nfsw = 1 where hrecaptcha = 'unavoidable'; +update forgesTbl set lst_kind = 'gray' where lst_kind = 'white' and (aws or (notes is not null and (notes like '%google_cloud_hosted%'))); +update forgesTbl set lst_kind = 'black' where cflogin or antitor or forced_nfsw; +update forgesTbl set notes = '**Amazon AWS-hosted**'||case when notes is null then '' else '; '||notes end where aws; +update forgesTbl set notes = '**dead site**'||case when notes is null then '' else '; '||notes end where dead; +update forgesTbl set notes = '**forced h/reCAPTCHA**'||case when notes is null then '' else '; '||notes end where hrecaptcha = 'unavoidable'; diff --git a/tools/gen_forge_table.sh b/tools/gen_forge_table.sh new file mode 100755 index 0000000..099d81a --- /dev/null +++ b/tools/gen_forge_table.sh @@ -0,0 +1,151 @@ +#!/bin/bash + +# Syntax: gen_forge_table.sh [text] +# +# Add "text" option to write the tables in simple text. +# Without the text option, all output will be markdown. + +typeset -r db_file=$(mktemp --dry-run --suffix=.db) + +typeset -A sym=([red_circle]=$'\xF0\x9F\x94\xB4' + [green_circle]=$'\xf0\x9f\x9f\xa2' + [test_tube]=$'\xf0\x9f\xa7\xaa' + [cloud_lightening]=$'\xf0\x9f\x8c\xa9' + [detective]=$'\xf0\x9f\x95\xb5' + [okhand]=$'\xF0\x9F\x91\x8C' + [eye]=$'\xf0\x9f\x91\x81' + [onion]=$'\xF0\x9F\xA7\x85' + [skull]=$'\xF0\x9F\x92\x80' + [vomit]=$'\xF0\x9F\xA4\xAE' + [noentry]=$'\xE2\x9B\x94' + [warning]=$'\xE2\x9A\xA0' + [biohaz]=$'\xE2\x98\xA3' + [hammerpick]=$'\xE2\x9A\x92') + +#local red_circle='๐Ÿ”ด' +#local green_circle='๐ŸŸข' +#local test_tube='๐Ÿงช' +#local cloud_lightening='๐ŸŒฉ' +#local detective='๐Ÿ•ต' +#local okhand='๐Ÿ‘Œ' +#local eye='๐Ÿ‘' +#local onion='๏ฟผ' +#local skull='๐Ÿ’€' +#local noentry='โ›”' + +intro() +{ + local lst=$1 + + case "$lst" in + white) + printf %s\\n 'The following forges have no significant ethical issues:' + ;; + gray) + printf %s\\n 'These forges would normally be blacklisted, but due to the short whitelist they are set aside as a less evil compromise to those blacklisted. They should still be avoided if possible.' + ;; + black) + printf %s\\n 'These forges have severe ethical or trust issues and should be boycotted:' + ;; + esac +};#intro + +table_populate() +{ + sqlite3 "${db_file}" < input_data/forges.sql +};#table_populate + +table_text() +{ + # .ft B (bold font) + # .ft I (italics font) + # .ft P (previous font) + # .ll 6i (6 inch width) + + for lst in white gray black + do + if [[ "$lst" == black ]] + then + url_clause="''" + else + url_clause="case when url_clrnet like '_%' then char(10)||'('||replace(url_clrnet,'https://','')||')||||||' else '' end" + fi + printf %s "# ${lst^}"'list + +``` +.TS +box tab(|); +c|c|c|c|c|c. +.ft BI +forge | Tor- | sensitive info | forced | forced execution | notes + | hostile | exposed to | re/hCAPTCHA | of non-free | + | | CloudFlare | | software | +.ft P +.T& +l|l|l|l|l|lp40. +' + sqlite3 "${db_file}" "select case when url_clrnet is null then '' else replace(url_clrnet,'https://','[')||']('||url_clrnet||')' end||'(placeholder)', + case when antitor then 'y' else 'n' end, + case when cflogin then 'y' else 'n' end, + case when hrecaptcha then 'y' else 'n' end, + case when forced_nfsw then 'y' else 'n' end, + case when notes is null then '' else 'T{ +.ll 6i +'|| replace(replace(notes,'[',''),']',' ') ||' +T}' end|| + $url_clause + from forgesTbl where lst_kind = '$lst' + order by url_clrnet collate nocase;" + + printf %s '.TE + +``` + +' + done +}; #table_text + +table_md() +{ + printf %s\\n "# Directory of forges" + + for lst in white black + do + if [[ "$lst" == black ]] + then + name_clause="case when url_clrnet is null then '' else replace(url_clrnet,'https://','') end" + else + name_clause="case when url_clrnet is null then '' else replace(url_clrnet,'https://','[')||']('||url_clrnet||')' end" + fi + printf %s "## ${lst^}list + +$(intro $lst)"' + +| *forge* | *registration publicly open* | *software* | *Tor-hostile* | *sensitive info exposed to CloudFlare* | *forced re/hCAPTCHA* | *forced execution of non-free software* | *notes* | +|---|---|---|---|---|---|---|---| +' + sqlite3 "${db_file}" "select $name_clause||case when url_onion is null then '' else '[${sym[onion]}]('||url_onion||')' end, + case when dead then '${sym[skull]}' when cflogin or antitor then '${sym[noentry]} (exclusive walled garden)' when not openpubreg then '${sym[red_circle]}' else '${sym[green_circle]}' end, + case software when 'gitlab_ce' then 'Gitlab (CE)' when 'gitlab_ee' then 'Gitlab (EE)' else 'gitea' end, + case when antitor then '${sym[eye]}' else 'n' end, + case when cflogin then '${sym[cloud_lightening]}' else 'n' end, + case when hrecaptcha = 'unavoidable' then '${sym[hammerpick]}' else 'n' end, + case when forced_nfsw then '${sym[biohaz]}' else 'n' end, + case when notes is null then '|' else notes||'|' end + from forgesTbl where lst_kind = '$lst' + order by url_clrnet collate nocase;" + printf $'\n' + done +};#table_md + +table_populate + +case "$1" in + txt|text) + table_text | tbl | nroff -Tascii | uniq + ;; + *) + printf '%s\n\n' '[//]: # (** DO NOT EDIT this file directly! ** It is auto-generated. Changes should be made to financial_institutions.sql or '"${0##*/}"' instead.)' + table_md + ;; +esac