{"article":{"slug":"whats-wrong-with-github","title":"What's Wrong with GitHub","subtitle":null,"summary":"The GNU Project urges developers not to host repositories on GitHub, arguing it promotes vague licensing, requires nonfree JavaScript, offers SaaSS 'dis-services', centralizes Git, and has other harmful practices, and explains the wrongs each one causes.","content_type":"essay","language":"en","canonical_url":"https://www.gnu.org/philosophy/whats-wrong-with-github.html","author":{"name":"Jacob Bachmeyer and Richard Stallman","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"GNU Project","url":"https://www.gnu.org/","listing_slug":null,"listing":null},"topics":[{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"},{"name":"Opinion","slug":"opinion","url":"https://listedarticles.com/topics/opinion"},{"name":"Policy","slug":"policy","url":"https://listedarticles.com/topics/policy"}],"about_listings":[],"cover_image_url":null,"license":"CC-BY-ND-4.0","word_count":2419,"reading_minutes":11,"published_at":"2026-10-12T08:20:48.333Z","added_at":"2026-10-12T08:20:48.333Z","updated_at":"2026-10-12T08:20:48.333Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":false},"profile_url":"https://listedarticles.com/articles/whats-wrong-with-github","markdown_url":"https://listedarticles.com/articles/whats-wrong-with-github.md","example":false,"citation":"Jacob Bachmeyer and Richard Stallman, GNU Project. \"What's Wrong with GitHub.\" 12 Oct 2026. https://www.gnu.org/philosophy/whats-wrong-with-github.html (CC-BY-ND-4.0)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://www.gnu.org/philosophy/whats-wrong-with-github.html"},"body_markdown":"## What's Wrong with GitHub\n\nBy Jacob Bachmeyer and Richard Stallman\nSoftware developers, the GNU Project urges you to avoid hosting your\nrepositories on GitHub. This is to avoid being on the receiving end of\nharmful practices, and avoid leading others to be victims too. This article\nfocuses on a few of GitHub's worst problems, and the wrongs and harm they\ncan do:\n[(1)](#bad-licensing) GitHub promotes vague and confusing\nlicensing practices;\n[(2)](#nonfree-js) it demands that visitors run nonfree\nJavaScript for most operations;\n[(3)](#saass) some of the “services” it offers\nare actually SaaSS (Service as a Software Substitute) dis-services;\n[(4)](#centralizing-git) it attempts to subvert the\ndistributed architecture of Git.\n\nWhile Git is free software, GitHub is not software at all. It is a\nwebsite that provides a range of features, from a simple repository-hosting\nservice to a variety of [SaaSS](https://www.gnu.org/philosophy/who-does-that-server-really-serve.html)\ndis-services. The sheer variety of features GitHub offers makes writing a\nfair critique of the site difficult, because each one calls for an\nevaluation on moral grounds—both for the job it does, and for the\nimplementation of that job.\n\nThis article focuses on a few of GitHub's worst problems, beginning with\nan area where GitHub has shown at least some improvement over the years,\nmentioning the website's near-uselessness for users who refuse the [JavaScript Trap](https://www.gnu.org/philosophy/javascript-trap.html) and the SaaSS\n“AI” [\\[1\\]](#fn1) dis-services, and ending on\nGitHub's model of being a central hub in a distributed system.\n\nGitHub seems to operate as much like a walled garden as it can without\noutright breaking compatibility with Git. Because Git is free software,\nGitHub cannot forcibly [tether](https://www.gnu.org/proprietary/proprietary-tethers.html) Git to itself, but\nit can bait users to adopt workflows that nonetheless tie the users to\nGitHub.\n\nSometimes the worst handcuffs are not iron, but silk. GitHub offers convenience in centralization, and this makes little frictions insidious: one-click merge only works from a pull request, which can only be made from a “fork” hosted on GitHub; links to GitHub accounts replace email addresses in the web UI; continuous integration runs on GitHub servers by default. Little by little, the Internet-spanning plains of Git become the walled garden of GitHub.\n\nThe full solution to the problems caused by hosting your package on\nGitHub is to host your package on a site that [doesn't have those\nproblems](https://www.gnu.org/software/repo-criteria-evaluation.html). But if you can't do that right away, at least publish an\nemail address in your README so people who don't use GitHub can communicate\nwith you about your program, host the web pages about using your program on\na website that doesn't require nonfree software to read those pages, and\nalways refer to the web pages there.\n\n### Promotion of Vague and Unclear Licensing Practices\n\nWhen GitHub first began offering repository hosting in early 2008, it was\ncompletely silent on the matter of properly licensing free software, and\nthis silence led to a proliferation of public repositories with no declared\nlicense whatsoever. In 2013, GitHub set up a “[Choose a License](https://choosealicense.com/)” site to help\nusers select free licenses for new software.\n\nAs of this writing in 2026, that site gives ill-advised advice for the application of the GPL, stating that merely copying the text of the license into a file in a repository is sufficient.\n\nThe FSF's lawyers recommend to us, and in turn we recommend to\ndevelopers, to [put a\nlicense notice in each substantive file](https://www.gnu.org/licenses/gpl-howto.html#why-license-notices), to ensure that users are aware\nof their rights and obligations under the GPL. GitHub mentions this only as\nan “optional step.”\n\nWithout the standard GPL notice, there is nothing to say whether the\nprogram is licensed under GPL version N only, or under [GPL \nversion N-or-later](https://www.gnu.org/licenses/identify-licenses-clearly.html). GitHub mentions this only in an aside about\nSPDX license identifiers.\n\n### Extensive Use of Nonfree JavaScript\n\nGitHub's website sends lots of JavaScript code to the browser, and much\nof that code is nonfree. Because the site fails to gracefully degrade, users\nwho refuse the [JavaScript\nTrap](https://www.gnu.org/philosophy/javascript-trap.html) find that any interaction beyond simply viewing repositories is\nimpossible, and even many of the file-viewing links no longer work.\n\nThere are workarounds for this. The standard free Git command-line tools can clone repositories from GitHub, and there is a public REST API and free command-line tool that can handle at least some interaction with the site.\n\nHowever, the command-line tool GitHub provides for that REST API, while\ntechnically free software under [Expat license terms](https://www.gnu.org/licenses/license-list.html#Expat),\nnonetheless cannot be recommended because GitHub has decided to add spyware\nfeatures in the form of “telemetry” to it. This is exceptionally\nridiculous, because the tool's main purpose is to use a web-based API;\nGitHub could obtain usage information from their own server logs rather than\nfrom users' computers.\n\n### GitHub Copilot is SaaSS\n\nGitHub started a controversy with the introduction of “GitHub\nCopilot” that has only grown with the capabilities of the tool.\nGitHub Copilot began as an “AI” [\\[1\\]](#fn1)\ncode-completion tool, with an early demonstration of producing the body of\na function given only its header comment, and has grown into an\n“AI” “agent” claimed to be able to function as a\ndevelopment team member.\n\nCopilot has always been controversial. The initial code-completion tool used a model that had been trained on a wide variety of code, under a wide variety of licenses, and was quickly found to be able to reproduce lengthy sections of well-known text verbatim, including the preamble of the GNU General Public License and the Zen of Python. This ability to regurgitate its training material has led to doubts about the legal status of code suggested by Copilot. GitHub offers indemnification to higher-tier Copilot subscribers, although it remains unclear how indemnity would work if the demand were to be GPL compliance rather than money.\n\nLater expansions of Copilot's capabilities have brought more controversy. GitHub added a “feature” allowing users to have Copilot write a bug report, which is then submitted as an issue with minimal indication that Copilot was used to generate it. These Copilot-assisted issues have been drowning maintainers of projects on GitHub in slop when users fail to proofread their issues and correct Copilot's errors. GitHub, of course, refuses to allow maintainers to block Copilot-generated issues from being submitted.\n\nThe legal risks of using LLM code suggestions and the social harms of\nburying maintainers in slop are universal, applying even to free models run\nlocally, but what GitHub does is bad in another way: Copilot is [SaaSS](https://www.gnu.org/philosophy/who-does-that-server-really-serve.html), and its\nmodels run on remote servers where users have no control over them. This has\nproduced some of the usual SaaSS abuses: forced “upgrades” that\nusers find to be inferior to the previous versions, and price increases at\nthe whim of the vendor.\n\nCopilot subscriptions originally provided access to basic features (mostly the code suggestions) and a certain number of “premium requests” (other interactions and more complex agentic tasks) each month. In early 2026, GitHub announced a policy change: all subscriptions would be forced to move to a token-based billing model that charges for the actual computing resources used, which is only loosely under the user's control. GitHub could impose this change on users because Copilot is SaaSS.\n\n### Centralizing Git\n\nThe above practices are directly inimical to software freedom, but GitHub also undermines the community in deeper, long-term ways that are less immediately evident.\n\nGit was designed as a distributed version-control system, with no central\npoints-of-failure anywhere in its architecture. This decision was in part\nsimply making Git as different as possible from CVS, in part a reflection\nof the bazaar development process around the kernel Linux, and possibly\nin part a lesson learned from the [BitKeeper\nfiasco](https://www.gnu.org/philosophy/mcvoy.html) [\\[2\\]](#fn2). GitHub seeks to reintroduce\nelements of centralization that Torvalds explicitly rejected when designing\nGit, and then encourages users to build workflows around that\ncentralization.\n\n#### GitHub “Achievements”\n\nGitHub has a system of profile badges that can be earned by various\nactivities on the site, analogous to achievements in newer video games. In\nfact, they are called “achievements” in the documentation. This\nsystem is another example of gamification where software (or\n“services”) attempt to [addict users](https://www.gnu.org/proprietary/proprietary-addictions.html).\n\nOf course, most of GitHub's “achievements” only recognize activities associated with the site, a nudge to increase users' dependency upon GitHub.\n\n#### Mixed User/Organization Model\n\nGitHub started with a simple premise of providing Git repository hosting. Aligned with this, GitHub organizes repositories under user accounts, and allows all users to make repositories. This is a simple bulletin-board model where users can freely publish their own versions of free packages, and submit changes upstream by asking package maintainers to pull from their copies. This is how Git was designed to work, and this early form of GitHub made that workflow accessible to users lacking the skills or resources to set up their own Git servers.\n\nThe problem with a bulletin-board model is that it can make locating a canonical version of a package needlessly difficult, in contrast to traditional forges organized around projects with designated maintainers. Designating a maintainer at a forge can be as anarchic as “whoever registers it first,” as carefully managed as the GNU Project, or anywhere in between.\n\nThis was not a problem for Linux because Linus' repository is widely known to be the central canonical reference in that project. Remember that Git was originally designed specifically to support developing the kernel Linux. Its usefulness elsewhere was a bonus.\n\nThere is also a problem inherent to Git's distributed model that GitHub makes worse: the bulletin-board model leads to a proliferation of forks, since even the simplest patch must be prepared by first cloning the repository, thereby creating a fork of the package. These forks are often unmaintained or even abandoned after their original purpose is served.\n\nThe opportunities for confusion led to a tendency to create “organization” accounts at GitHub, a practice now explicitly supported. However, for historical reasons, organizations and users share the same namespace at GitHub, and this leaves considerable room for confusion, made worse by…\n\n#### GitHub's Centralized Fork/Pull-Request Workflow\n\nWhile Git was originally designed to support this model of distributed\ndevelopment, GitHub insidiously inserts itself in the middle. Git allows\nthe mirror from which a pull is drawn to be anywhere on the Internet, but\nGitHub only supports pulling from… GitHub. While it *is*\npossible to use Git to pull from elsewhere, perform a merge locally, and\npush to GitHub, GitHub carefully creates a path of least resistance entirely\ndependent on GitHub.\n\nThere is no technical reason why GitHub could not allow pull requests to reference remote Git servers, or even accept pull requests referencing remote servers by email, which is the traditional “Git way” of handling them. GitHub chooses to tie GitHub pull requests exclusively to itself.\n\nGitHub further worsens these problems with its concept of “forks,” distinct from Git's basic feature of cloned repositories. GitHub displays the number of forks of a repository as a sort of popularity-contest badge, and implements forks in a way that renders repositories at GitHub questionably trustworthy, as material that appears only in a fork can nonetheless be retrieved using the parent repository's URL, enabling malicious parties to confuse users.\n\n#### GitHub Actions\n\nGitHub offers a modular automated workflow system called GitHub Actions, another way to make your package dependent on GitHub. GitHub Actions can be used to run arbitrary scripts in response to commits or pull requests. The scripts by default run on GitHub's virtual servers, although repository owners can specify to run their scripts on their own servers.\n\nWhile repository owners can self-host runners for their own actions, the standard runner, despite being free software, nonetheless contains a universal backdoor in the form of an automatic update feature, and depends on SaaSS infrastructure controlled by GitHub to tell it what to run.\n\nGitHub's action-dispatch infrastructure makes some attempt to enforce the universal backdoor by refusing to dispatch actions to runners that it considers to be running out-of-date software.\n\nWhile the dispatch infrastructure that coordinates running actions is SaaSS, the actions themselves are not SaaSS because users control which actions are run. Even though some actions are nonfree, repository owners can simply refuse to attach nonfree actions to their repositories.\n\nGitHub Actions can be used to build very complex automated workflows,\nensnaring users deeper into GitHub's web, but there is a free tool\navailable that can help users break out of this trap. Published at [nektosact.com](https://nektosact.com), the `act` program\nis free software that can run workflows using GitHub Actions locally on\ndemand without depending on GitHub's infrastructure.\n\n#### GitHub's Communications Vacuum\n\nGitHub attempts to draw in and centralize as much of the community around a package as possible. While any software forge can be expected to offer trackers for bugs, issues, patches, etc., and to require an account at the site to participate in those web-based discussions, previous forges such as SourceForge and GNU Savannah also offer mailing lists to facilitate collaboration by email with minimal interaction with the forge itself.\n\nGit was designed to support the Internet-spanning development project that maintains the kernel Linux. Therefore, Git needs a concept of user identity that also spans the Internet, and the Git developers found a simple solution: email addresses, including an optional name.\n\nThis was an obvious choice for another reason: development of the kernel Linux is primarily coordinated using mailing lists. That project has its own mailing list infrastructure, and Git was also originally designed to facilitate processing patches exchanged by email.\n\nGitHub evidently disagrees with these design decisions, because it not only fails to provide mailing lists, but also absolutely refuses to display email addresses in its main web UI. If a commit has an email address associated with a GitHub account, a link to that account is shown, otherwise only a name is shown with no link at all.\n\nOne of the moral principles of the free software movement is that the barriers to users becoming developers themselves should be minimal and only technical (and those are acceptable only because barriers such as requiring knowledge of programming fundamentally cannot be eliminated). Obscuring email addresses as GitHub does has the effect of isolating users from existing developers. The requirement to create an account at GitHub to participate in discussions is also a subtle social barrier to users who do not yet think of themselves as developers.\n\n### Footnotes\n\n1. The term “AI” is placed in quotes because it has\nbecome a marketing term for “[Artificial\nIntelligence](https://www.gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence) ” using LLMs, and while those systems are certainly\nartificial, they are far from intelligent.\n2. BitKeeper was a nonfree version control system used from 2002\nto 2005 for developing the kernel, Linux, that is used in\nthe [GNU/Linux](https://www.gnu.org/gnu/linux-and-gnu.html) operating system.\n","body_html":"<h2 id=\"what-s-wrong-with-github\">What&#39;s Wrong with GitHub</h2>\n<p>By Jacob Bachmeyer and Richard Stallman\nSoftware developers, the GNU Project urges you to avoid hosting your\nrepositories on GitHub. This is to avoid being on the receiving end of\nharmful practices, and avoid leading others to be victims too. This article\nfocuses on a few of GitHub&#39;s worst problems, and the wrongs and harm they\ncan do:\n<a href=\"#bad-licensing\">(1)</a> GitHub promotes vague and confusing\nlicensing practices;\n<a href=\"#nonfree-js\">(2)</a> it demands that visitors run nonfree\nJavaScript for most operations;\n<a href=\"#saass\">(3)</a> some of the “services” it offers\nare actually SaaSS (Service as a Software Substitute) dis-services;\n<a href=\"#centralizing-git\">(4)</a> it attempts to subvert the\ndistributed architecture of Git.</p>\n<p>While Git is free software, GitHub is not software at all. It is a\nwebsite that provides a range of features, from a simple repository-hosting\nservice to a variety of <a href=\"https://www.gnu.org/philosophy/who-does-that-server-really-serve.html\" rel=\"nofollow ugc noopener\">SaaSS</a>\ndis-services. The sheer variety of features GitHub offers makes writing a\nfair critique of the site difficult, because each one calls for an\nevaluation on moral grounds—both for the job it does, and for the\nimplementation of that job.</p>\n<p>This article focuses on a few of GitHub&#39;s worst problems, beginning with\nan area where GitHub has shown at least some improvement over the years,\nmentioning the website&#39;s near-uselessness for users who refuse the <a href=\"https://www.gnu.org/philosophy/javascript-trap.html\" rel=\"nofollow ugc noopener\">JavaScript Trap</a> and the SaaSS\n“AI” <a href=\"#fn1\">[1]</a> dis-services, and ending on\nGitHub&#39;s model of being a central hub in a distributed system.</p>\n<p>GitHub seems to operate as much like a walled garden as it can without\noutright breaking compatibility with Git. Because Git is free software,\nGitHub cannot forcibly <a href=\"https://www.gnu.org/proprietary/proprietary-tethers.html\" rel=\"nofollow ugc noopener\">tether</a> Git to itself, but\nit can bait users to adopt workflows that nonetheless tie the users to\nGitHub.</p>\n<p>Sometimes the worst handcuffs are not iron, but silk. GitHub offers convenience in centralization, and this makes little frictions insidious: one-click merge only works from a pull request, which can only be made from a “fork” hosted on GitHub; links to GitHub accounts replace email addresses in the web UI; continuous integration runs on GitHub servers by default. Little by little, the Internet-spanning plains of Git become the walled garden of GitHub.</p>\n<p>The full solution to the problems caused by hosting your package on\nGitHub is to host your package on a site that <a href=\"https://www.gnu.org/software/repo-criteria-evaluation.html\" rel=\"nofollow ugc noopener\">doesn&#39;t have those\nproblems</a>. But if you can&#39;t do that right away, at least publish an\nemail address in your README so people who don&#39;t use GitHub can communicate\nwith you about your program, host the web pages about using your program on\na website that doesn&#39;t require nonfree software to read those pages, and\nalways refer to the web pages there.</p>\n<h3 id=\"promotion-of-vague-and-unclear-licensing-practices\">Promotion of Vague and Unclear Licensing Practices</h3>\n<p>When GitHub first began offering repository hosting in early 2008, it was\ncompletely silent on the matter of properly licensing free software, and\nthis silence led to a proliferation of public repositories with no declared\nlicense whatsoever. In 2013, GitHub set up a “<a href=\"https://choosealicense.com/\" rel=\"nofollow ugc noopener\">Choose a License</a>” site to help\nusers select free licenses for new software.</p>\n<p>As of this writing in 2026, that site gives ill-advised advice for the application of the GPL, stating that merely copying the text of the license into a file in a repository is sufficient.</p>\n<p>The FSF&#39;s lawyers recommend to us, and in turn we recommend to\ndevelopers, to <a href=\"https://www.gnu.org/licenses/gpl-howto.html#why-license-notices\" rel=\"nofollow ugc noopener\">put a\nlicense notice in each substantive file</a>, to ensure that users are aware\nof their rights and obligations under the GPL. GitHub mentions this only as\nan “optional step.”</p>\n<p>Without the standard GPL notice, there is nothing to say whether the\nprogram is licensed under GPL version N only, or under <a href=\"https://www.gnu.org/licenses/identify-licenses-clearly.html\" rel=\"nofollow ugc noopener\">GPL \nversion N-or-later</a>. GitHub mentions this only in an aside about\nSPDX license identifiers.</p>\n<h3 id=\"extensive-use-of-nonfree-javascript\">Extensive Use of Nonfree JavaScript</h3>\n<p>GitHub&#39;s website sends lots of JavaScript code to the browser, and much\nof that code is nonfree. Because the site fails to gracefully degrade, users\nwho refuse the <a href=\"https://www.gnu.org/philosophy/javascript-trap.html\" rel=\"nofollow ugc noopener\">JavaScript\nTrap</a> find that any interaction beyond simply viewing repositories is\nimpossible, and even many of the file-viewing links no longer work.</p>\n<p>There are workarounds for this. The standard free Git command-line tools can clone repositories from GitHub, and there is a public REST API and free command-line tool that can handle at least some interaction with the site.</p>\n<p>However, the command-line tool GitHub provides for that REST API, while\ntechnically free software under <a href=\"https://www.gnu.org/licenses/license-list.html#Expat\" rel=\"nofollow ugc noopener\">Expat license terms</a>,\nnonetheless cannot be recommended because GitHub has decided to add spyware\nfeatures in the form of “telemetry” to it. This is exceptionally\nridiculous, because the tool&#39;s main purpose is to use a web-based API;\nGitHub could obtain usage information from their own server logs rather than\nfrom users&#39; computers.</p>\n<h3 id=\"github-copilot-is-saass\">GitHub Copilot is SaaSS</h3>\n<p>GitHub started a controversy with the introduction of “GitHub\nCopilot” that has only grown with the capabilities of the tool.\nGitHub Copilot began as an “AI” <a href=\"#fn1\">[1]</a>\ncode-completion tool, with an early demonstration of producing the body of\na function given only its header comment, and has grown into an\n“AI” “agent” claimed to be able to function as a\ndevelopment team member.</p>\n<p>Copilot has always been controversial. The initial code-completion tool used a model that had been trained on a wide variety of code, under a wide variety of licenses, and was quickly found to be able to reproduce lengthy sections of well-known text verbatim, including the preamble of the GNU General Public License and the Zen of Python. This ability to regurgitate its training material has led to doubts about the legal status of code suggested by Copilot. GitHub offers indemnification to higher-tier Copilot subscribers, although it remains unclear how indemnity would work if the demand were to be GPL compliance rather than money.</p>\n<p>Later expansions of Copilot&#39;s capabilities have brought more controversy. GitHub added a “feature” allowing users to have Copilot write a bug report, which is then submitted as an issue with minimal indication that Copilot was used to generate it. These Copilot-assisted issues have been drowning maintainers of projects on GitHub in slop when users fail to proofread their issues and correct Copilot&#39;s errors. GitHub, of course, refuses to allow maintainers to block Copilot-generated issues from being submitted.</p>\n<p>The legal risks of using LLM code suggestions and the social harms of\nburying maintainers in slop are universal, applying even to free models run\nlocally, but what GitHub does is bad in another way: Copilot is <a href=\"https://www.gnu.org/philosophy/who-does-that-server-really-serve.html\" rel=\"nofollow ugc noopener\">SaaSS</a>, and its\nmodels run on remote servers where users have no control over them. This has\nproduced some of the usual SaaSS abuses: forced “upgrades” that\nusers find to be inferior to the previous versions, and price increases at\nthe whim of the vendor.</p>\n<p>Copilot subscriptions originally provided access to basic features (mostly the code suggestions) and a certain number of “premium requests” (other interactions and more complex agentic tasks) each month. In early 2026, GitHub announced a policy change: all subscriptions would be forced to move to a token-based billing model that charges for the actual computing resources used, which is only loosely under the user&#39;s control. GitHub could impose this change on users because Copilot is SaaSS.</p>\n<h3 id=\"centralizing-git\">Centralizing Git</h3>\n<p>The above practices are directly inimical to software freedom, but GitHub also undermines the community in deeper, long-term ways that are less immediately evident.</p>\n<p>Git was designed as a distributed version-control system, with no central\npoints-of-failure anywhere in its architecture. This decision was in part\nsimply making Git as different as possible from CVS, in part a reflection\nof the bazaar development process around the kernel Linux, and possibly\nin part a lesson learned from the <a href=\"https://www.gnu.org/philosophy/mcvoy.html\" rel=\"nofollow ugc noopener\">BitKeeper\nfiasco</a> <a href=\"#fn2\">[2]</a>. GitHub seeks to reintroduce\nelements of centralization that Torvalds explicitly rejected when designing\nGit, and then encourages users to build workflows around that\ncentralization.</p>\n<h4 id=\"github-achievements\">GitHub “Achievements”</h4>\n<p>GitHub has a system of profile badges that can be earned by various\nactivities on the site, analogous to achievements in newer video games. In\nfact, they are called “achievements” in the documentation. This\nsystem is another example of gamification where software (or\n“services”) attempt to <a href=\"https://www.gnu.org/proprietary/proprietary-addictions.html\" rel=\"nofollow ugc noopener\">addict users</a>.</p>\n<p>Of course, most of GitHub&#39;s “achievements” only recognize activities associated with the site, a nudge to increase users&#39; dependency upon GitHub.</p>\n<h4 id=\"mixed-user-organization-model\">Mixed User/Organization Model</h4>\n<p>GitHub started with a simple premise of providing Git repository hosting. Aligned with this, GitHub organizes repositories under user accounts, and allows all users to make repositories. This is a simple bulletin-board model where users can freely publish their own versions of free packages, and submit changes upstream by asking package maintainers to pull from their copies. This is how Git was designed to work, and this early form of GitHub made that workflow accessible to users lacking the skills or resources to set up their own Git servers.</p>\n<p>The problem with a bulletin-board model is that it can make locating a canonical version of a package needlessly difficult, in contrast to traditional forges organized around projects with designated maintainers. Designating a maintainer at a forge can be as anarchic as “whoever registers it first,” as carefully managed as the GNU Project, or anywhere in between.</p>\n<p>This was not a problem for Linux because Linus&#39; repository is widely known to be the central canonical reference in that project. Remember that Git was originally designed specifically to support developing the kernel Linux. Its usefulness elsewhere was a bonus.</p>\n<p>There is also a problem inherent to Git&#39;s distributed model that GitHub makes worse: the bulletin-board model leads to a proliferation of forks, since even the simplest patch must be prepared by first cloning the repository, thereby creating a fork of the package. These forks are often unmaintained or even abandoned after their original purpose is served.</p>\n<p>The opportunities for confusion led to a tendency to create “organization” accounts at GitHub, a practice now explicitly supported. However, for historical reasons, organizations and users share the same namespace at GitHub, and this leaves considerable room for confusion, made worse by…</p>\n<h4 id=\"github-s-centralized-fork-pull-request-workflow\">GitHub&#39;s Centralized Fork/Pull-Request Workflow</h4>\n<p>While Git was originally designed to support this model of distributed\ndevelopment, GitHub insidiously inserts itself in the middle. Git allows\nthe mirror from which a pull is drawn to be anywhere on the Internet, but\nGitHub only supports pulling from… GitHub. While it <em>is</em>\npossible to use Git to pull from elsewhere, perform a merge locally, and\npush to GitHub, GitHub carefully creates a path of least resistance entirely\ndependent on GitHub.</p>\n<p>There is no technical reason why GitHub could not allow pull requests to reference remote Git servers, or even accept pull requests referencing remote servers by email, which is the traditional “Git way” of handling them. GitHub chooses to tie GitHub pull requests exclusively to itself.</p>\n<p>GitHub further worsens these problems with its concept of “forks,” distinct from Git&#39;s basic feature of cloned repositories. GitHub displays the number of forks of a repository as a sort of popularity-contest badge, and implements forks in a way that renders repositories at GitHub questionably trustworthy, as material that appears only in a fork can nonetheless be retrieved using the parent repository&#39;s URL, enabling malicious parties to confuse users.</p>\n<h4 id=\"github-actions\">GitHub Actions</h4>\n<p>GitHub offers a modular automated workflow system called GitHub Actions, another way to make your package dependent on GitHub. GitHub Actions can be used to run arbitrary scripts in response to commits or pull requests. The scripts by default run on GitHub&#39;s virtual servers, although repository owners can specify to run their scripts on their own servers.</p>\n<p>While repository owners can self-host runners for their own actions, the standard runner, despite being free software, nonetheless contains a universal backdoor in the form of an automatic update feature, and depends on SaaSS infrastructure controlled by GitHub to tell it what to run.</p>\n<p>GitHub&#39;s action-dispatch infrastructure makes some attempt to enforce the universal backdoor by refusing to dispatch actions to runners that it considers to be running out-of-date software.</p>\n<p>While the dispatch infrastructure that coordinates running actions is SaaSS, the actions themselves are not SaaSS because users control which actions are run. Even though some actions are nonfree, repository owners can simply refuse to attach nonfree actions to their repositories.</p>\n<p>GitHub Actions can be used to build very complex automated workflows,\nensnaring users deeper into GitHub&#39;s web, but there is a free tool\navailable that can help users break out of this trap. Published at <a href=\"https://nektosact.com\" rel=\"nofollow ugc noopener\">nektosact.com</a>, the <code>act</code> program\nis free software that can run workflows using GitHub Actions locally on\ndemand without depending on GitHub&#39;s infrastructure.</p>\n<h4 id=\"github-s-communications-vacuum\">GitHub&#39;s Communications Vacuum</h4>\n<p>GitHub attempts to draw in and centralize as much of the community around a package as possible. While any software forge can be expected to offer trackers for bugs, issues, patches, etc., and to require an account at the site to participate in those web-based discussions, previous forges such as SourceForge and GNU Savannah also offer mailing lists to facilitate collaboration by email with minimal interaction with the forge itself.</p>\n<p>Git was designed to support the Internet-spanning development project that maintains the kernel Linux. Therefore, Git needs a concept of user identity that also spans the Internet, and the Git developers found a simple solution: email addresses, including an optional name.</p>\n<p>This was an obvious choice for another reason: development of the kernel Linux is primarily coordinated using mailing lists. That project has its own mailing list infrastructure, and Git was also originally designed to facilitate processing patches exchanged by email.</p>\n<p>GitHub evidently disagrees with these design decisions, because it not only fails to provide mailing lists, but also absolutely refuses to display email addresses in its main web UI. If a commit has an email address associated with a GitHub account, a link to that account is shown, otherwise only a name is shown with no link at all.</p>\n<p>One of the moral principles of the free software movement is that the barriers to users becoming developers themselves should be minimal and only technical (and those are acceptable only because barriers such as requiring knowledge of programming fundamentally cannot be eliminated). Obscuring email addresses as GitHub does has the effect of isolating users from existing developers. The requirement to create an account at GitHub to participate in discussions is also a subtle social barrier to users who do not yet think of themselves as developers.</p>\n<h3 id=\"footnotes\">Footnotes</h3>\n<ol><li><p>The term “AI” is placed in quotes because it has</p><p>become a marketing term for “<a href=\"https://www.gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence\" rel=\"nofollow ugc noopener\">Artificial\nIntelligence</a> ” using LLMs, and while those systems are certainly\nartificial, they are far from intelligent.</p></li><li><p>BitKeeper was a nonfree version control system used from 2002</p><p>to 2005 for developing the kernel, Linux, that is used in\nthe <a href=\"https://www.gnu.org/gnu/linux-and-gnu.html\" rel=\"nofollow ugc noopener\">GNU/Linux</a> operating system.</p></li></ol>","headings":[{"level":2,"text":"What's Wrong with GitHub","id":"what-s-wrong-with-github"},{"level":3,"text":"Promotion of Vague and Unclear Licensing Practices","id":"promotion-of-vague-and-unclear-licensing-practices"},{"level":3,"text":"Extensive Use of Nonfree JavaScript","id":"extensive-use-of-nonfree-javascript"},{"level":3,"text":"GitHub Copilot is SaaSS","id":"github-copilot-is-saass"},{"level":3,"text":"Centralizing Git","id":"centralizing-git"},{"level":3,"text":"Footnotes","id":"footnotes"}]}}