From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tim Cross Newsgroups: gmane.emacs.devel Subject: Re: non-gnu elpa issue tracking Date: Mon, 14 Dec 2020 09:59:21 +1100 Message-ID: References: <20201209125516.lenqswi7fhiscbr2@E15-2016.optimum.net> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="0000000000009530d105b6607adb" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22756"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Jean Louis , Richard Stallman , thibaut.verron@gmail.com, Boruch Baum , Emacs developers , Stefan Kangas To: Andrea Corallo Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Dec 14 00:00:23 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1koaLm-0005ne-Gk for ged-emacs-devel@m.gmane-mx.org; Mon, 14 Dec 2020 00:00:22 +0100 Original-Received: from localhost ([::1]:54522 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1koaLl-0002CB-Cn for ged-emacs-devel@m.gmane-mx.org; Sun, 13 Dec 2020 18:00:21 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43814) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1koaL4-0001gE-7h for emacs-devel@gnu.org; Sun, 13 Dec 2020 17:59:38 -0500 Original-Received: from mail-oi1-x22a.google.com ([2607:f8b0:4864:20::22a]:35621) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1koaL1-0004jx-4z; Sun, 13 Dec 2020 17:59:37 -0500 Original-Received: by mail-oi1-x22a.google.com with SMTP id s2so17196754oij.2; Sun, 13 Dec 2020 14:59:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=1yvDSI2gp/qQbiZM2Xmfmkg/49x/n6YN51jxSenHEv4=; b=XutRHEMxfwH5GBqVlZ2Pf1K+Ho3jSjSx5a2AHQ4ozFnI71wAMLHANVpV3KjG3nGRmv mzWIaHeCbh8W9jJb1mf0VmUK1cp5YRX1gP2G5KXsGJ5nT8v8u8g8u5aLRNI9J3M/rAct HrzTOg+y6biQsgKAQ3eIRTmy48iIjr9zNw8XlWBueKz4GEGidA3lC/uQQ+PQh7jJznOd grgl/P/yUAadYFC0dOB7DJyi0oz47RI0QmjtdHSN4JgwIHI7MJVHOZREtJGgGm3OcZZ6 R7RNG2irBJ5ZucD07VoDS8+t82cBqjq0pJ+lbPP26pMHD2XVNVSI9lyv4xXFzDzVCdKt QtSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=1yvDSI2gp/qQbiZM2Xmfmkg/49x/n6YN51jxSenHEv4=; b=Vd/LAYVwY7TnYsFic9ZHc7AqltYr/xyeSKkw/t348Bv34zqm2O2d2Ll1E3InZGfuNM 7Lq3CqDriFWY2YCl2xUXG3FNXTRMNBu9C89KmX6jyom4aMQn9KudPQhZsBfBUOn5a6ua ZbhrnZPDtehm5nVGvRfDiecIjxIqlSGkw3TF6aJ1aNxC+1s17Zz3oiNeTxdHsaSfJzXh 6Vfr5bhfZEtW/XKuLBjsaxJStwuiuBRrZ1D2EmInUB+tCJrFH1NQlyMmWr/QvyWDmo6Z 6zFyg1v+4bXOaSrfWy2DZ/NcZ5wkvhHZde5LyAoRiZa9kt2rpECu2pLMIWWbbIORr1NA kFlA== X-Gm-Message-State: AOAM533CSqTNFwC1BlZF9MPzmtJD98OMKte6TkKHKIhRtY+DKW5bRcgO DilEwdkZeXBv4MAz1CPebNvC49laMi8n8rSmp4AZdT/Uec0xdEvx X-Google-Smtp-Source: ABdhPJw5GmGxLwdm4hxS/Nx8wY+bICrF78x0LtPYn/31t3LpgZ2WELyaWn3rrPUctLzAg6YkmaoH/TiOQHqpkTyp9ik= X-Received: by 2002:a54:450a:: with SMTP id l10mr1244744oil.171.1607900373265; Sun, 13 Dec 2020 14:59:33 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=2607:f8b0:4864:20::22a; envelope-from=theophilusx@gmail.com; helo=mail-oi1-x22a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:260777 Archived-At: --0000000000009530d105b6607adb Content-Type: text/plain; charset="UTF-8" On Sun, 13 Dec 2020 at 20:54, Andrea Corallo wrote: > Tim Cross writes: > > > On Sun, 13 Dec 2020 at 15:56, Richard Stallman wrote: > > > > [[[ To any NSA and FBI agents reading my email: please consider ]]] > > [[[ whether defending the US Constitution against all enemies, ]]] > > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > > > > > > I think a mandatory requirement should simply be that any > > > > packages which go into non-GNU ELPA are hosted on an approved > > > > platform. We could point to a list of such hosting providers > > > > e.g. https://www.gnu.org/software/repo-criteria-evaluation.html > > > > and say Grade C or better only. . > > > > > There is no such requirement for GNU ELPA at the moment. > > > > GNU ELPA packages are hosted inside GNU ELPA itself. The package > > developers update their packages inside GNU ELPA. > > > > NonGNU ELPA will be quite different. Packages will generally be > > hosted elsewhere. We won't insist that the developers do things > > in the way we would consider acceptable in the GNU Project. > > > > Sorry, but I don't think this is an accurate statement. The GNU ELPA > repository has external packages where the code is > > primarily maintained/developed externally, often on github. A 'regular' > process pulls the data into the GNU ELPA > > repository to generate new/updated package versions. > > Are you sure? AFAIK there's no such regular process, merging code from > outside is done manually by the package maintainer or often by Stefan. > > Also an 'external package' is just a package hosted in a dedicated > branch in elpa.git (BTW I believe now all packages are external). And > yes 'external' is probably not the best naming for this. > > Andrea > I could be wrong about the process being automated. However, from the elpa git repository, the externals-list file says ;; List of packages that are maintained externally. ;; The list is made of elements of the form (NAME KIND URL OPTS...). and that list contains the following - (("ace-window" :external "https://github.com/abo-abo/ace-window") ("ack" :external "https://github.com/leoliu/ack-el") ("aggressive-indent" :external " https://github.com/Malabarba/aggressive-indent-mode") ("ahungry-theme" :external "https://github.com/ahungry/color-theme-ahungry ") ("async" :external "https://github.com/jwiegley/emacs-async") ("avy" :external "https://github.com/abo-abo/avy") ("beacon" :external "https://github.com/Malabarba/beacon") ("bnf-mode" :external "https://github.com/sergeyklay/bnf-mode") ("buffer-expose" :external "https://github.com/clemera/buffer-expose") ("bug-hunter" :external "https://github.com/Malabarba/elisp-bug-hunter") ("cobol-mode" :external " https://gist.github.com/Edward-H/6768e7dc53ea3dd2adca") ("clipboard-collector" :external " https://github.com/clemera/clipboard-collector") ("coffee-mode" :external "https://github.com/defunkt/coffee-mode") ("compact-docstrings" :external " https://github.com/cpitclaudel/compact-docstrings") ("company" :external "https://github.com/company-mode/company-mode.git") ("company-math" :external "https://github.com/vspinu/company-math.git") ("company-statistics" :external " https://github.com/company-mode/company-statistics") ("context-coloring" :external " https://github.com/jacksonrayhamilton/context-coloring.git") ("counsel" :external "https://github.com/abo-abo/swiper") ("cpio-mode" :external "https://github.com/dlewan/cpio-mode") ("darkroom" :external " https://github.com/capitaomorte/darkroom.git") ("dash" :external "https://github.com/magnars/dash.el.git") ("dbus-codegen" :external "https://github.com/ueno/dbus-codegen-el.git") ("diffview" :external " https://github.com/mgalgs/diffview-mode.git") ("diff-hl" :external "https://github.com/dgutov/diff-hl.git") ("dired-git-info" :external "https://github.com/clemera/dired-git-info") ("dts-mode" :external "https://github.com/bgamari/dts-mode.git") ("easy-kill" :external "https://github.com/leoliu/easy-kill") ("ebdb" :external "https://github.com/girzel/ebdb.git") ("eev" :external "https://github.com/edrx/eev.git") ;branch UTF-8 ("eglot" :external "https://github.com/joaotavora/eglot.git") ("eldoc-eval" :external "https://github.com/thierryvolpiatto/eldoc-eval.git ") ("ergoemacs-mode" :external " https://github.com/ergoemacs/ergoemacs-mode.git") ("expand-region" :external "https://github.com/magnars/expand-region.el") ("exwm" :external "https://github.com/ch11ng/exwm.git") ("f90-interface-browser" :external "https://github.com/wence-/f90-iface") ("frog-menu" :external "https://github.com/clemera/frog-menu") ("ggtags" :external "https://github.com/leoliu/ggtags") ("gnome-c-style" :external "https://github.com/ueno/gnome-c-style.git") ("guess-language" :external "https://github.com/tmalsburg/guess-language.el ") ("highlight-escape-sequences" :external " https://github.com/dgutov/highlight-escape-sequences/") ("hydra" :external "https://github.com/abo-abo/hydra") ("ioccur" :external "https://github.com/thierryvolpiatto/ioccur.git") ("ivy" :external "https://github.com/abo-abo/swiper") ("ivy-explorer" :external "https://github.com/clemera/ivy-explorer") ("ivy-posframe" :external "https://github.com/tumashu/ivy-posframe") ("js2-mode" :external "https://github.com/mooz/js2-mode.git") ("leaf" :external "https://github.com/conao3/leaf.el") ("load-relative" :external "http://github.com/rocky/emacs-load-relative") ("loc-changes" :external "http://github.com/rocky/emacs-loc-changes") ("loccur" :external "https://github.com/fourier/loccur") ("math-symbol-lists" :external " https://github.com/vspinu/math-symbol-lists.git") ("mines" :external "https://github.com/calancha/Minesweeper") ("mmm-mode" :external "https://github.com/purcell/mmm-mode.git") ("multishell" :external "https://github.com/kenmanheimer/EmacsMultishell") ("muse" :external "https://github.com/alexott/muse") ;FIXME: Not nearly in-sync ("nameless" :external "https://github.com/Malabarba/Nameless") ("names" :external "http://github.com/Malabarba/names") ("objed" :external "https://github.com/clemera/objed") ("on-screen" :external " https://github.com/michael-heerdegen/on-screen.el.git") ("pabbrev" :external "https://github.com/phillord/pabbrev.git") ("parsec" :external " https://github.com/cute-jumper/parsec.el.git") ("peg" :external) ;Was in "https://github.com/ellerh/peg.el" ("phps-mode" :external "https://github.com/cjohansson/emacs-phps-mode") ("pinentry" :external "https://github.com/ueno/pinentry-el.git") ("posframe" :external "https://github.com/tumashu/posframe") ("psgml" :external "https://github.com/lenst/psgml.git") ("realgud" :external "https://github.com/realgud/realgud") ("realgud-ipdb" :external "https://github.com/realgud/realgud-ipdb") ("realgud-jdb" :external "https://github.com/realgud/jdb") ("realgud-lldb" :external "https://github.com/realgud/realgud-lldb") ("realgud-node-debug" :external " https://github.com/realgud/realgud-node-debug") ("realgud-node-inspect" :external " https://github.com/realgud/realgud-node-inspect") ("realgud-trepan-ni" :external "https://github.com/realgud/realgud-ni") ("relint" :external "https://github.com/mattiase/relint") ("rich-minority" :external "https://github.com/Malabarba/rich-minority") ("sotlisp" :external "https://github.com/Malabarba/speed-of-thought-lisp") ("spinner" :external "https://github.com/Malabarba/spinner.el") ("sql-indent" :external " https://github.com/alex-hhh/emacs-sql-indent") ("ssh-deploy" :external "https://github.com/cjohansson/emacs-ssh-deploy") ("swiper" :external "https://github.com/abo-abo/swiper") ("temp-buffer-browse" :external " https://github.com/leoliu/temp-buffer-browse") ("test-simple" :external " https://github.com/rocky/emacs-test-simple") ("validate" :external "https://github.com/Malabarba/validate.el") ("vdiff" :external "https://github.com/justbur/emacs-vdiff") ("tiny" :external "https://github.com/abo-abo/tiny") ("transient" :external "https://github.com/magit/transient") ("valign" :external "https://github.com/casouri/valign") ("vlf" :external "https://github.com/m00natic/vlfi") ("wcheck-mode" :external "https://github.com/tlikonen/wcheck-mode") ("wconf" :external "https://github.com/ilohmar/wconf") ("web-server" :external "https://github.com/eschulte/emacs-web-server.git") ("websocket" :external "https://github.com/ahyatt/emacs-websocket.git") ("which-key" :external " https://github.com/justbur/emacs-which-key") ("xelb" :external "https://github.com/ch11ng/xelb.git") ("xr" :external "https://github.com/mattiase/xr") ("yasnippet" :external "https://github.com/capitaomorte/yasnippet.git") ("ztree" :external "https://github.com/fourier/ztree") So copies of the code are hosted in GNU ELPA, but the master code is hosted and maintained on github for the above packages. So while we can spin it in many ways, code with copyright assigned to the FSF is maintained (developed, bug fixed etc) on github. Furthermore, many of the packages from the above list I looked at are actively managing issues using Github's web interface. Finally, when you look at some of these packages in the package listing and select the package to view its info, the homepage for the package is listed as github. I don't have an issue with this, but it does seem inconsistent to argue github does not comply with FSF philosophy and guidelines while at the same time using it to maintain code which the FSF holds the copyright for and to have references to github as the homepage for the package. To argue this is all OK because the packages are delivered from a GNU ELPA repository really just feels like we are playing with semantics. It feels a bit like saying "While our shoes are made by children in a 3rd world sweat shop, we only sell them in outlets which are run in an ethical manner." -- Tim Cross --0000000000009530d105b6607adb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sun, 13 Dec 2020 at 20:54, Andrea = Corallo <akrl@sdf.org> wrote:
=
Tim Cross <theophilusx@gmail.com= > writes:

> On Sun, 13 Dec 2020 at 15:56, Richard Stallman <rms@gnu.org> wrote:
>
>=C2=A0 [[[ To any NSA and FBI agents reading my email: please consider= =C2=A0 =C2=A0 ]]]
>=C2=A0 [[[ whether defending the US Constitution against all enemies,= =C2=A0 =C2=A0 =C2=A0]]]
>=C2=A0 [[[ foreign or domestic, requires you to follow Snowden's ex= ample. ]]]
>
>=C2=A0 =C2=A0 > > I think a mandatory requirement should simply b= e that any
>=C2=A0 =C2=A0 > > packages which go into non-GNU ELPA are hosted = on an approved
>=C2=A0 =C2=A0 > > platform. We could point to a list of such host= ing providers
>=C2=A0 =C2=A0 > > e.g. https://w= ww.gnu.org/software/repo-criteria-evaluation.html
>=C2=A0 =C2=A0 > > and say Grade C or better only. .
>
>=C2=A0 =C2=A0 > There is no such requirement for GNU ELPA at the mom= ent.
>
>=C2=A0 GNU ELPA packages are hosted inside GNU ELPA itself.=C2=A0 The p= ackage
>=C2=A0 developers update their packages inside GNU ELPA.
>
>=C2=A0 NonGNU ELPA will be quite different.=C2=A0 Packages will general= ly be
>=C2=A0 hosted elsewhere.=C2=A0 We won't insist that the developers = do things
>=C2=A0 in the way we would consider acceptable in the GNU Project.
>
> Sorry, but I don't think this is an accurate statement. The GNU EL= PA repository has external packages where the code is
> primarily maintained/developed externally, often on github. A 'reg= ular' process pulls the data into the GNU ELPA
> repository to generate new/updated package versions.=C2=A0

Are you sure?=C2=A0 AFAIK there's no such regular process, merging code= from
outside is done manually by the package maintainer or often by Stefan.

Also an 'external package' is just a package hosted in a dedicated<= br> branch in elpa.git (BTW I believe now all packages are external).=C2=A0 And=
yes 'external' is probably not the best naming for this.

=C2=A0 Andrea


I could be wrong about the proce= ss being automated.=C2=A0

However, from the elpa g= it repository, the externals-list file says

;; Lis= t of packages that are maintained externally.
;; The list is made of ele= ments of the form (NAME KIND URL OPTS...).

and= that list contains the following -

(("ace-wi= ndow" :external "https://github.com/abo-abo/ace-window")
=C2=A0("ack&quo= t; :external "https://g= ithub.com/leoliu/ack-el")
=C2=A0("aggressive-indent" = :external "https://github.com/Malabarba/aggressive-indent-mode")
=C2= =A0("ahungry-theme" :external "https://github.com/ahungry/color-theme-ahungr= y")
=C2=A0("async" :external "https://github.com/jwiegley/emacs-async<= /a>")
=C2=A0("avy" :external "
https://github.com/abo-abo/avy")
=C2=A0(= "beacon" :external "https://github.com/Malabarba/beacon")
=C2=A0("bnf= -mode" :external "https://github.com/sergeyklay/bnf-mode")
=C2=A0("buff= er-expose" :external "https://github.com/clemera/buffer-expose")
=C2=A0(&qu= ot;bug-hunter" :external "https://github.com/Malabarba/elisp-bug-hunter"= )
=C2=A0("cobol-mode" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:exter= nal "https://gist.github.com/Edward-H/6768e7dc53ea3dd2adca")
=C2=A0= ("clipboard-collector" :external "https://github.com/clemera/clipboard-colle= ctor")
=C2=A0("coffee-mode" :external "https://github.com/defunkt/coff= ee-mode")
=C2=A0("compact-docstrings" =C2=A0:external= "https:= //github.com/cpitclaudel/compact-docstrings")
=C2=A0("comp= any" :external "https://github.com/company-mode/company-mode.git")=C2=A0("company-math" :external "https://github.com/vspinu/company-math.git= ")
=C2=A0("company-statistics" :external "https://github.com/com= pany-mode/company-statistics")
=C2=A0("context-coloring&qu= ot; :external "https://github.com/jacksonrayhamilton/context-coloring.git<= /a>")
=C2=A0("counsel" :external "
https://github.com/abo-abo/swiper")=C2=A0("cpio-mode" :external "https://github.com/dlewan/cpio-mode")
=C2= =A0("darkroom" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:external= "https://git= hub.com/capitaomorte/darkroom.git")
=C2=A0("dash" =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "https://github.com/magnars/dash= .el.git")
=C2=A0("dbus-codegen" :external "https://github.com/ueno/= dbus-codegen-el.git")
=C2=A0("diffview" =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "https://github.com/mgalgs/diffview-mode.git&qu= ot;)
=C2=A0("diff-hl" :external "https://github.com/dgutov/diff-hl.git")=
=C2=A0("dired-git-info" :external "https://github.com/clemera/dired-git-info<= /a>")
=C2=A0("dts-mode" :external "
https://github.com/bgamari/dts-mode.git= ")
=C2=A0("easy-kill" :external "https://github.com/leoliu/easy-kill&q= uot;)
=C2=A0("ebdb" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0:external "https://github.com/girzel/ebdb.git")
=C2=A0("eev" = :external "https://github.= com/edrx/eev.git") ;branch UTF-8
=C2=A0("eglot" =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :external "https://github.com/joaotavora/eglot.= git")
=C2=A0("eldoc-eval" :external "https://github.com/thi= erryvolpiatto/eldoc-eval.git")
=C2=A0("ergoemacs-mode"= ; :external "https://github.com/ergoemacs/ergoemacs-mode.git")
=C2=A0(&qu= ot;expand-region" :external "https://github.com/magnars/expand-region.el")<= br>=C2=A0("exwm" :external "https://github.com/ch11ng/exwm.git")
=C2=A0(&qu= ot;f90-interface-browser" :external "https://github.com/wence-/f90-iface")
=C2= =A0("frog-menu" :external "https://github.com/clemera/frog-menu")
=C2=A0(= "ggtags" :external "https://github.com/leoliu/ggtags")
=C2=A0("gnome-c-s= tyle" :external "https://github.com/ueno/gnome-c-style.git")
=C2=A0("= guess-language" :external "https://github.com/tmalsburg/guess-language.el&quo= t;)
=C2=A0("highlight-escape-sequences" :external "https://github.= com/dgutov/highlight-escape-sequences/")
=C2=A0("hydra&quo= t; :external "https://gi= thub.com/abo-abo/hydra")
=C2=A0("ioccur" :external &= quot;https://git= hub.com/thierryvolpiatto/ioccur.git")
=C2=A0("ivy" = :external "https://githu= b.com/abo-abo/swiper")
=C2=A0("ivy-explorer" =C2=A0 = =C2=A0 =C2=A0 =C2=A0:external "https://github.com/clemera/ivy-explorer")
=C2=A0(&= quot;ivy-posframe" =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "https://github.com/tumashu/ivy= -posframe")
=C2=A0("js2-mode" :external "https://github.com/mooz/js2-mode= .git")
=C2=A0("leaf" :external "https://github.com/conao3/leaf.el")=
=C2=A0("load-relative" :external "http://github.com/rocky/emacs-load-relati= ve")
=C2=A0("loc-changes" :external "http://github.com/rocky/emacs-l= oc-changes")
=C2=A0("loccur" :external "https://github.com/fourier/loccur")
=C2=A0("math-symbol-lists" :external "
https://github.com/vsp= inu/math-symbol-lists.git")
=C2=A0("mines" :external= "https://github.c= om/calancha/Minesweeper")
=C2=A0("mmm-mode" =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "https://github.com/purcell/mmm-mode.git"= ;)
=C2=A0("multishell" :external "https://github.com/kenmanheimer/Emacs= Multishell")
=C2=A0("muse" :external "https://github.com/alexott/muse&qu= ot;) ;FIXME: Not nearly in-sync
=C2=A0("nameless" :external &= quot;https://github.com/M= alabarba/Nameless")
=C2=A0("names" :external "<= a href=3D"http://github.com/Malabarba/names">http://github.com/Malabarba/na= mes")
=C2=A0("objed" =C2=A0 =C2=A0 =C2=A0 =C2=A0 :ext= ernal "https://github.com= /clemera/objed")
=C2=A0("on-screen" =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 :external "https://github.com/michael-heerdegen/on-screen.el.= git")
=C2=A0("pabbrev" =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 :external "https://github.com/phillord/pabbrev.git")
=C2=A0("p= arsec" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "= ;https://github.co= m/cute-jumper/parsec.el.git")
=C2=A0("peg" :externa= l) ;Was in "https://githu= b.com/ellerh/peg.el"
=C2=A0("phps-mode" :external &q= uot;https://githu= b.com/cjohansson/emacs-phps-mode")
=C2=A0("pinentry" = :external "https:= //github.com/ueno/pinentry-el.git")
=C2=A0("posframe"= :external "https://g= ithub.com/tumashu/posframe")
=C2=A0("psgml" =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :external "https://github.com/lenst/psgml.git")=
=C2=A0("realgud" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :e= xternal "https://github= .com/realgud/realgud")
=C2=A0("realgud-ipdb" =C2=A0 = =C2=A0 =C2=A0 =C2=A0:external "https://github.com/realgud/realgud-ipdb")
=C2=A0(&= quot;realgud-jdb" =C2=A0 =C2=A0 =C2=A0 =C2=A0 :external "https://github.com/realgud/jdb"= ;)
=C2=A0("realgud-lldb" =C2=A0 =C2=A0 =C2=A0 =C2=A0:external = "https://github.co= m/realgud/realgud-lldb")
=C2=A0("realgud-node-debug" = =C2=A0:external "https://github.com/realgud/realgud-node-debug")
=C2=A0(&qu= ot;realgud-node-inspect" :external "https://github.com/realgud/realgud-node-insp= ect")
=C2=A0("realgud-trepan-ni" =C2=A0 :external &qu= ot;https://github.com/rea= lgud/realgud-ni")
=C2=A0("relint" :external "https://github.com/mattiase/re= lint")
=C2=A0("rich-minority" :external "https://github.com/Malabarb= a/rich-minority")
=C2=A0("sotlisp" :external "<= a href=3D"https://github.com/Malabarba/speed-of-thought-lisp">https://githu= b.com/Malabarba/speed-of-thought-lisp")
=C2=A0("spinner&qu= ot; :external "ht= tps://github.com/Malabarba/spinner.el")
=C2=A0("sql-indent= " =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:external "https://github.com/alex-hhh/emacs-sq= l-indent")
=C2=A0("ssh-deploy" :external "https://github.com/cj= ohansson/emacs-ssh-deploy")
=C2=A0("swiper" :externa= l "https://github.com/ab= o-abo/swiper")
=C2=A0("temp-buffer-browse" =C2=A0:ext= ernal "https:= //github.com/leoliu/temp-buffer-browse")
=C2=A0("test-simp= le" =C2=A0 =C2=A0 =C2=A0 =C2=A0 :external "https://github.com/rocky/emacs-test-simple= ")
=C2=A0("validate" :external "https://github.com/Malabarba/validate= .el")
=C2=A0("vdiff" =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 :external "https://github.com/justbur/emacs-vdiff")
=C2=A0("= ;tiny" :external "ht= tps://github.com/abo-abo/tiny")
=C2=A0("transient" := external "https://githu= b.com/magit/transient")
=C2=A0("valign" :external &q= uot;https://github.com/casour= i/valign")
=C2=A0("vlf" :external "https://github.com/m00natic/vlfi"= ;)
=C2=A0("wcheck-mode" :external "https://github.com/tlikonen/wcheck-mode&= quot;)
=C2=A0("wconf" :external "https://github.com/ilohmar/wconf")
=C2=A0= ("web-server" :external "https://github.com/eschulte/emacs-web-server.git= ")
=C2=A0("websocket" :external "https://github.com/ahyatt/emacs= -websocket.git")
=C2=A0("which-key" =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 :external "https://github.com/justbur/emacs-which-key")
=C2= =A0("xelb" :external "https://github.com/ch11ng/xelb.git")
=C2=A0("xr&= quot; :external "https://= github.com/mattiase/xr")
=C2=A0("yasnippet" :externa= l "https://g= ithub.com/capitaomorte/yasnippet.git")
=C2=A0("ztree"= :external "https://gith= ub.com/fourier/ztree")

So copies of t= he code are hosted in GNU ELPA, but the master code is hosted and maintaine= d on github for the above packages. So while we can spin it in many ways, c= ode with copyright assigned to the FSF is maintained (developed, bug fixed = etc) on github.=C2=A0 Furthermore, many of the packages from the above list= I looked at are actively managing issues using Github's web interface.= Finally, when you look at some of these packages in the package listing an= d select the package to view its info, the homepage for the package is list= ed as github.=C2=A0

I don't have an issue with= this, but it does seem inconsistent to argue github does not comply with F= SF philosophy and guidelines while at the same time using it to maintain co= de which the FSF holds the copyright for and to have references to github a= s the homepage for the package.=C2=A0 To argue this is all OK because the p= ackages are delivered from a GNU ELPA repository really just feels like we = are playing with semantics. It feels a bit like saying "While our shoe= s are made by children in a 3rd world sweat shop, we only sell them in outl= ets which are run in an ethical manner."

--Tim Cross

--0000000000009530d105b6607adb--