[//]: # (to do: merge https://libreplanet.org/wiki/FSF_2020_forge_evaluation)
[//]: # (to do: fix point 7, as adding ".git" fixes it)
# Ethical Problems with the Gitlab.com service:
There is Gitlab software, and there are services that use that
software. The software comes in two varieties: "*Community Edition*"
(CE) and "*Enterprise Edition*" (EE). The Community Edition is free
software. Several forges run Gitlab as their
backend. E.g. framagit.org, git.feneas.org, git.hardenedbsd.org,
git.jami.net, gitlab.com, gitlab.freedesktop.org, gitlab.gnome.org,
gitlab.torproject.org, source.puri.sm, and source.small-tech.org. See
the [full list](forge_comparison.md) if you're interested.
This article is only focused on the gitlab _.com_ ***service***.
These are the ethical problems with that specific instance:
1. Sexist treatment toward saleswomen who are [told to wear][sexism]
dresses, heels, etc.
1. Gitlab.com is a Google-hosted service
[of CIA agency IQT (in-q-tel)][iqt]. Consequently, the service is
inaccessible to users in Crimea, Cuba, Iran, North Korea, Sudan,
and Syria, due to [sanctions imposed][sanctions] by Office of
Foreign Assets Control of the United States. Thus
[FSF criteria C2][fsfCriteria] is unsatisfied. Quite perversely,
this actually [impacts][DoSdevs] developers who contributed free
software to Gitlab.com (without compensation), and who are now
refused service because of their national origin.
1. A survey [shows][nobugrpt] that a significant number of bug reports
are *withheld* when the bug tracker is inside a restrictive or
politically controversial walled-garden like MS Github or
gitlab.com. Even those willing and able to file a bug report are
blocked if they are in Crimea, Cuba, Iran, North Korea, Sudan, or
Syria. The chilling effect on bug reports reduces the software
quality of the commons globally.
1. Gitlab.com [proxies][cf] through privacy abuser CloudFlare.
Because we cannot check the HTTPS connection between the Gitlab EE
backend and CloudFlare's data center,
[FSF criteria C6][fsfCriteria] is unverifiable. Moreover, users
are deceived by the padlock into thinking they have e2ee with
gitlab.com's host at the other endpoint, when actually all traffic
is surreptitiously intercepted. There is absolute certainty that
the visitor-side tunnel terminates at a CloudFlare data center,
which guarantees that CloudFlare [sees all traffic][joepie]
including usernames and unhashed passwords. At a minimum this
undermines the spirit and intent of [FSF criteria C6][fsfCriteria].
[FSF criteria B1][fsfCriteria] is also unsatisfied due to
deliberate sharing all traffic with CloudFlare.
1. Excessive [tracking by Snowplow (possibly FLoC)][snowplow-cache]
renders [FSF criteria C4][fsfCriteria] unsatisfied. The terms of
service were [updated in 2019][tracking-cache] to ensure you agree
to the tracking.
1. Contrary to widespread confused notions about Gitlab being free
software, the gitlab.com *service* does *not* run the Gitlab
Community Edition (GCE). It runs the proprietary "enterprise
edition". Even if gitlab.com were to switch to GCE, visitors would
still be forced to run non-free software imposed by their content
delivery network (CDN).
1. The single most important feature of any free software repository
is the ability to clone a project. It is the only feature that
secures, delivers, and enables users to exercise all software
freedoms. Yet gitlab.com's walled garden is so restricted that Tor
users are not even permitted to clone a project:
![](https://infosec.exchange/system/media_attachments/files/105/764/904/002/819/754/original/38832d4b9ffc75fa.png)
consequently [FSF criteria C3][fsfCriteria] is unmet.
8. Gitlab.com treats people trying to register with hostility if their
ISP uses CGNAT or if they use Tor. Access is inconvenient in some
cases (e.g. GUI users), while access is outright denied to other
users (e.g. terminal users with non-GUI browsers, browsers without
JavaScript capability, and users who happen to use a high traffic
exit node). ISPs in Serbia and India often use CGNAT for their
lowest tiers of service while charging an extra fee for IPv4 or
IPv6. This means gitlab.com is effectively discriminating against
poor people, Serbians, and Indians.
[FSF criteria C2 & C3][fsfCriteria] is therefore unmet.
1. Gitlab.com refuses service to users who attempt to register with a
`@spamgourmet.com` forwarding email address to track spam and to
protect their more sensitive internal email address. This means
people who approach gitlab.com to contribute a bug report
charitably are forced to compromise their own security. This
ultimately discourages bug reports.
1. Hostile treatment of Tor users *after* they've established an
account and have proven to be a non-spammer. The irony is that a
Tor user was denied collaboration with the PRISM-Break Project
(PBP) because a PRISM privacy abuser was given the power to control
who can participate. Google should not have that power over the
PRISM Break project. (note that PBP [refused][glbug] to leave
gitlab.com, so they have a hand in the oppression of their own
contributors).
-----
Regarding the last item above, a user was simply trying to edit an
existing message that they had already posted and a CAPTCHA was forced
on them. There are several problems with gitlab.com's rampant abuse
of CAPTCHAs:
11. CAPTCHAs break robots and robots are not necessarily malicious.
E.g. An author could have had a robot correcting a widespread
misspelling error in all their posts.
1. CAPTCHAs inflict uncompensated human labor and undermine the 13th
amendment in the US (note the CIA's role in this regard). CAPTCHAs
put humans to work for machines when it is machines that should
work for humans. The fruits of the human labor does not go to the
laborer, but instead hCAPTCHA [pays][cfpaid] CloudFlare a cash
reward. Consequently the laborers benefit their oppressor.
1. Gitlab.com neglects to obtain *informed* consent to use the
CAPTCHA. That is, users are not informed about what information is
being captured by who prior to solving the CAPTCHA (e.g. they don't
know Google will get their IP address). Users are also
deceived. E.g. after solving an hCAPTCHA for Cloudflare they may be
forced to also solve a Google reCAPTCHA. This exploitation treats a
person [merely as a means][asAmeans] to a highly unethical extent.
1. CAPTCHAs are defeated. Spammers find it economical to use
third-world sweat shop labor for CAPTCHAs while legitimate users
have this burden of dealing with CAPTCHAs that are often broken.
1. hCAPTCHAs compromise security as a consequence of surveillance
capitalism that entails collection of IP address and browser
print.
* anonymity is [compromised][grcDenanymises] (the article covers
reCAPTCHA but hCAPTCHA is vulnerable for the same reasons).
* the third-party javascript that hCAPTCHA executes could linger
well after the CAPTCHA puzzle is solved and intercept user
information and actions. They could even pull an eBay move and
[scan your LAN ports][ebay].
1. GUI CAPTCHAs fail to meet [WCAG standards][wcag] and thus
discriminate against impaired people, ultimately blocking
satisfaction of [FSF criteria C2][fsfCriteria]:
(rationale)
WCAG Principle |
How the Principle is Violated |
1.1: Provide text alternatives for any non-text content so that it can be changed into other forms people need, such as large print, braille, speech, symbols or simpler language. |
hCAPTCHA wholly relies on graphical images. There is no option for a text or audible puzzle. |
1.2: Time-based media: Provide alternatives for time-based media. |
hCAPTCHA has an invisible timer that the user cannot control. |
1.3: Create content that can be presented in different ways (for example simpler layout) without losing information or structure. |
When a user attempts to use lynx , w3m , wget , cURL , or any other text-based tool, the CAPTCHA is inaccessible and thus unsolvable. The website's content is thus also inaccessible. Moreover, CloudFlare attacks robots -- robots that could help provide an alternative user interface for users that are impaired or handicapped. Robots often use wget or cURL to obtain data that is presented to the user in a more useful way. |
2.1: Make all functionality available from a keyboard. |
The hCAPTCHA does not accept answers from the keyboard. |
2.2: Provide users enough time to read and use content. |
If you don't solve the hCAPTCHA puzzle fast enough, the puzzle is removed and the user must start over. Some puzzles are vague and need time to ponder that exceeds the time limit. |
3.1: Make text content readable and understandable. |
When the CAPTCHA says "select all images with parking meters", how is someone in Ireland supposed to know what a parking meter in the USA looks like? When the CAPTCHA says "click on all squares with a motorcycle" and shows an image of an apparent motorcycle instrument panel, it's unclear if that qualifies (it could be a moped). Another image showed a scooter with a faring that resembled a sports bike. Some people would consider it a motorcycle. When the CAPTCHA said "click on all squares with a train", some of the images were the interior of a subway train or tram. Some people consider a subway to be a train underground, while others don't equate the two. The instructions are also sometimes given in a language the user doesn't understand. |
3.2: Make web pages appear and operate in predictable ways. |
It's unpredictable whether the IP reputation assessment will invoke a CAPTCHA and also unpredictable whether a CAPTCHA solution will be accepted. The time you have to solve the puzzle is also unpredictable. |
4.1.: Maximize compatibility with current and future user agents, including assistive technologies. |
When a user attempts to use lynx , w3m , wget , cURL or any other text-based tool, the blockade imposes tooling limitations on the user. |
16. Users are forced to execute [non-free javascript][nonfreejs], thus
violating [FSF criteria C0.0][fsfCriteria].
1. The CAPTCHA requires a GUI, thus denying service to users of
text-based clients including the `git` command.
1. The CAPTCHAs are often broken. This amounts to a denial of service:
* E.g.1: the CAPTCHA server itself refuses to give the puzzle saying there is too much activity.
* E.g.2: gitlab.com has switched back and forth between Google's
reCAPTCHA and hCAPTCHA (by *Intuition Machines, Inc.*) but at the
moment they've settled on hCAPTCHA. Both have broken and both
default to access denial in that event:
|
|
19. The CAPTCHAs are often unsolvable.
* E.g.1: the CAPTCHA puzzle is broken by ambiguity (is one pixel in
a grid cell of a pole holding a street sign considered a street
sign?)
* E.g.2: the puzzle is expressed in a language the viewer doesn't
understand.
20. Network neutrality abuse: at moments when Google reCAPTCHA is
used, there is an access inequality whereby users logged into
Google accounts are given
[more favorable treatment][netneutrality] by the CAPTCHA (but then
they take on more privacy abuse). Tor users are given extra harsh
treatment.
[//]: # (I solved the hCAPTCHA, got a green checkmark, and then it looped back to an empty checkbox and I was forced to solve the hCAPTCHA for a 2nd time. And both times I had to solve 2 windows (4 windows in total [36 images]). After solving the 2nd hCAPTCHA gitlab.com brought me to a 404 error. So after all the hard work I was still blocked.)
[sexism]: https://web.archive.org/web/20200309145121/https://www.theregister.co.uk/2020/02/06/gitlab_sales_women
[sanctions]: https://en.wikipedia.org/wiki/GitLab#cite_note-30
[DoSdevs]: https://persadon.com/@danialbehzadi/104971201238264901
[cf]: https://about.gitlab.com/blog/2020/01/16/gitlab-changes-to-cloudflare
[cf-cache]: https://web.archive.org/web/20201104122751/about.gitlab.com/blog/2020/01/16/gitlab-changes-to-cloudflare
[tracking]: https://social.privacytools.io/@darylsun/103015834654172174
[tracking-cache]: https://web.archive.org/web/20210305215642if_/social.privacytools.io/@darylsun/103015834654172174
[grcDenanymises]: https://web.archive.org/web/20201108115815/https://cryptome.org/2016/07/cloudflare-de-anons-tor.htm
[nonfreejs]: https://libreplanet.org/wiki/Group:Free_Javascript_Action_Team#Ideas_for_focus
[fsfCriteria]: https://www.gnu.org/software/repo-criteria.html
[joepie]: http://cryto.net/~joepie91/blog/2016/07/14/cloudflare-we-have-a-problem
[iqt]: https://www.iqt.org/portfolio?&taxonomy=tech_areas&tax_id=152
[nobugrpt]: https://infosec.exchange/@bojkotiMalbona/104637098084869887
[ebay]: http://web.archive.org/web/20200526092506/blog.nem.ec/2020/05/24/ebay-port-scanning
[wcag]: https://en.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines
[cfpaid]: https://docs.hcaptcha.com/faq
[netneutrality]: https://www.fastcompany.com/90369697/googles-new-recaptcha-has-a-dark-sideby
[glbug]: https://web.archive.org/web/20210306172223/gitlab.com/prism-break/prism-break/-/issues/2146
[GRConTP]: https://lists.gnu.org/archive/html/repo-criteria-discuss/2021-03/msg00000.html
[asAmeans]: https://plato.stanford.edu/entries/persons-means
[//]: # (unused links)
[grcNonfree]: # ([recaptcha/api.js](https://www.google.com/recaptcha/api.js))
[signalGRC]: # (https://user-images.githubusercontent.com/18015852/55681364-07713600-5926-11e9-8874-137e4faaf423.png)
[snowplow-cache]: # (https://web.archive.org/web/20220811090954/docs.gitlab.com/ee/development/snowplow/)