Article published by: Leah Rowe
Date of publication: 14 September 2024
UPDATE on 15 September. I’ve had a talk with Stenzek. This is an evolving situation with a lot more nuance to it than first glance. The decision to make DuckStation proprietary is still terrible, and I intend to rectify this; I’ve proposedh a number of ideas to Stenzek for how to effectively retain DuckStation as a free software project. If this is unsuccessful, I’ll fully fork it myself (from prior to the re-licensing) and probably find people in the PSX scene willing to help maintain it (in that scenario, my role will only be to facilitate and provide infrastructure, while not having an active role in core development, as I already have my Libreboot project which takes all of my time). I simply wish to prevent what is currently the best emulator of its kind becoming proprietary software.
I’ve been informed recently that a popular Sony PlayStation emulator, recently became proprietary software, where it was previously Free/OpenSource Software released under the GNU General Public License (version 3).
That fact alone is troubling in and of itself; the right to study, share, modify and otherwise use software freely without restriction, is an importart right that everyone must have.
However, DuckStation appears to contain a large number of outside contributions, and it would appear that they have not been consulted about the licensing change. Therefore, DuckStation could potentially be violating the terms of the GPL.
DuckStation is currently released under the terms of the Creative Commons ShareAlike Non-Commercial No-derivative license version 4.0, or CC BY-NC-ND 4.0 for short - this is a proprietary license, because it prohibits commercial usage of the software and it prohibits any person or entity from distributing modified versions - Stanzek has also decreed that nobody shall provide builds but him, from now on.
NOTE: Stanzek is the nickname of the principle author of DuckStation, full name Connor McLaughlin. You can find out about DuckStation on the GitHub site and on the official site - but NOTE:
I have decided to provide an archived version of DuckStation, from before the licensing change, here: https://codeberg.org/vimuser/duckstation - this version is released under GNU GPLv3, the one before the re-licensing, so this version is free software.
I have decided to contact Stanzek, in addition to all contributors and the SFC, about this recent re-licensing, which I believe constitutes a violation of the GPL.
The following email was CC’d to Stanzek, plus all contributors to DuckStation (as shown in git shortlog) and the Software Freedom Conservancy:
Hi everyone,
This is largely targeted at those who have contributed to the DuckStation project, a popular Sony PlayStation emulator released under the terms of GNU General Public License version 3.
Connor McLaughlin, also known as Stenzek, recently re-licensed DuckStation to the PolyForm Strict 1.0.0 license, in this commit:
https://github.com/stenzek/duckstation/commit/9ca6b5430fb358b39f21ce0b2fc0268de954dd23
This was about two weeks ago. Connor then re-licensed yet again to Creative Commons CC-BY-NC-ND, in this revision yesterday:
https://github.com/stenzek/duckstation/commit/76906756d0b5f93ac2559c29676cbea11496a21a
I have found no evidence that he sought permission for such re-licensing, so I’m contacting every person who has contributed to the project to let you all know. There may be other works that Stanzek has imported in his own commits, that were done by other people, e.g. shaders, but I haven’t audited that. I have simply scraped the email addresses shown on commits in the Git repository, for all contributors; Stanzek himself is also included in this email chain.
Indeed, 95% of the commits are from Stanzek, but he still needs permission from all of you for re-licensing, since he has also re-licensed the works done by all of you (the 5%). If he does not have permission from you, then he must remove all of your works from the project, and also remove any of his work that is derived from all of your works.
It is also my duty to report to you all that the Android port of DuckStation is closed source, and may also contain some of your works.
Now, the re-licensing itself is not the only issue:
The PolyForm license, and the CC BY-NC-ND licenses, prohibit modifications to any version that is distributed, and it prevents commercial usage of the code. If you look at the README file that Stanzek now provides, he is also placing restrictions (by his own decree outside of the licensing terms) against the provision of builds other than his own.
In other words: although DuckStation source code remains publicly available, Stanzek has turned the code into proprietary software. Any software that is not entirely free/opensource is by definition proprietary software. Please read the following resources:
https://www.gnu.org/philosophy/free-sw.en.html
https://writefreesoftware.org/learn
The ability to use, study, share and modify code freely is an important right that everyone must have. This includes for commercial purposes. It is the reason why much of our technology exists today in the way that it does; take Linux for example, which runs all of the world’s most critical infrastructure and is indeed the underpinning of the Android operating system, and countless other mobile operating systems such as PostMarketOS.
Much of the modern internet that we all depend upon now exists because of the free software movement. This includes many of the free and open standards that we use on the web today.
Now, a given software author has the legal authority to put whatever licensing they wish on their code, but I do say their code, and that is why this re-licensing is problematic in the first place.
In summary: DuckStation is violating the terms of the GNU General Public License, by infringing upon the copyright of all parts contributed to DuckStation by the people CC’d on this email.
I would ask that you all consider this fact; the irony is that Stanzek himself has publicly expressed dissatisfaction with the number of commercialised forks of DuckStation, yet he is providing his own commercial version and stealing all of your contributions to do it, re-licensing it without your permission.
I’ve CC’d the Software Freedom Conservancy (SFC) on this email, who are knows for assisting in dealing with GPL violations; for example, took at their well-knows Vizio lawsuit:
https://sfconservancy.org/copyleft-compliance/vizio.html
You can find more information about them here:
The SFC are dedicated to championing computer user freedom, most notably in the enforcement against GPL violations. The people who run the SFC are all lawyers, and often provide pro-bono legal services (it started as an offshoot from another, older organisation called the Software Freedom Law Center). I would also point out that a fork of DuckStation does indeed exist:
https://www.libretro.com/index.php/category/swanstation/
I posted about all of this on my Mastodon. Please see the following post:
https://mas.to/@libreleah/113131594753424867
Unless the DuckStation author changes the project back to GPL, I would suggest that you all boycott the project, and tell others to do the same; you could send all future contributions to SwanStation instead, which is part of libretro. I would suggest that all future works go to a fork (could be SwanStation), instead of DuckStation, while still permitting Stanzek to contribute; this way, any future abusive re-licensing could not realistically occur. The reason I say this, is because based on my own research, it seems that Stanzek’s bios against the GPL has existed for some time, so I’m uncertain as to whether he could be trusted in charge of a public project.
Anyway, that’s all I wanted to say. I’m not involved with the development of DuckStation myself (I don’t even use it, though I do enjoy the PlayStation and have a modded PS1 with Xstation, it’s neato).
Hardware preservation is important, and it’s therefore important that these emulators remain free and open source, so that people in the future can always develop them and based new works off of them.
Recipients of the above email text are shown below, which shows the email as it was formatted (base64-encoded), when I sent it out.
The version above was provided for ease iof reading, but here is the email as sent out from my client, base64-encoded (that’s why I posted the human-readable version above, but it’s the same text):
Message-ID: <0f06bb4c-79b3-4658-8409-7165a256f57a@minifree.org>
Date: Sat, 14 Sep 2024 13:03:04 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
Cc: Email addresses redacted from this web page.
From: Leah Rowe <info@minifree.org>
Subject: GPL violation on DuckStation
Autocrypt: addr=info@minifree.org; keydata=
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
To: info@sfconservancy.org
Content-Type: multipart/signed; micalg=pgp-sha256;
protocol="application/pgp-signature";
boundary="------------6Q1qviZqKVkpz644tKfprH0E"
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------------6Q1qviZqKVkpz644tKfprH0E
Content-Type: multipart/mixed; boundary="------------30OTLipcrolSqLl0BpCJMKiW";
protected-headers="v1"
From: Leah Rowe <info@minifree.org>
To: info@sfconservancy.org
Cc: Email addresses redacted from this web page
Message-ID: <0f06bb4c-79b3-4658-8409-7165a256f57a@minifree.org>
Subject: GPL violation on DuckStation
--------------30OTLipcrolSqLl0BpCJMKiW
Content-Type: multipart/mixed; boundary="------------hpYhMnPpZcss5MAku0wV33Xb"
--------------hpYhMnPpZcss5MAku0wV33Xb
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
SGkgZXZlcnlvbmUsDQoNClRoaXMgaXMgbGFyZ2VseSB0YXJnZXRlZCBhdCB0aG9zZSB3aG8g
aGF2ZSBjb250cmlidXRlZCB0byB0aGUgDQpEdWNrU3RhdGlvbiBwcm9qZWN0LCBhIHBvcHVs
YXIgU29ueSBQbGF5U3RhdGlvbiBlbXVsYXRvciByZWxlYXNlZCB1bmRlciANCnRoZSB0ZXJt
cyBvZiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuDQoNCkNvbm5vciBN
Y0xhdWdobGluLCBhbHNvIGtub3duIGFzIFN0ZW56ZWssIHJlY2VudGx5IHJlLWxpY2Vuc2Vk
IA0KRHVja1N0YXRpb24gdG8gdGhlIFBvbHlGb3JtIFN0cmljdCAxLjAuMCBsaWNlbnNlLCBp
biB0aGlzIGNvbW1pdDoNCg0KaHR0cHM6Ly9naXRodWIuY29tL3N0ZW56ZWsvZHVja3N0YXRp
b24vY29tbWl0LzljYTZiNTQzMGZiMzU4YjM5ZjIxY2UwYjJmYzAyNjhkZTk1NGRkMjMNCg0K
VGhpcyB3YXMgYWJvdXQgdHdvIHdlZWtzIGFnby4gQ29ubm9yIHRoZW4gcmUtbGljZW5zZWQg
eWV0IGFnYWluIHRvIA0KQ3JlYXRpdmUgQ29tbW9ucyBDQy1CWS1OQy1ORCwgaW4gdGhpcyBy
ZXZpc2lvbiB5ZXN0ZXJkYXk6DQoNCmh0dHBzOi8vZ2l0aHViLmNvbS9zdGVuemVrL2R1Y2tz
dGF0aW9uL2NvbW1pdC83NjkwNjc1NmQwYjVmOTNhYzI1NTljMjk2NzZjYmVhMTE0OTZhMjFh
DQoNCkkgaGF2ZSBmb3VuZCBubyBldmlkZW5jZSB0aGF0IGhlIHNvdWdodCBwZXJtaXNzaW9u
IGZvciBzdWNoIA0KcmUtbGljZW5zaW5nLCBzbyBJJ20gY29udGFjdGluZyBldmVyeSBwZXJz
b24gd2hvIGhhcyBjb250cmlidXRlZCB0byB0aGUgDQpwcm9qZWN0IHRvIGxldCB5b3UgYWxs
IGtub3cuIFRoZXJlIG1heSBiZSBvdGhlciB3b3JrcyB0aGF0IFN0YW56ZWsgaGFzIA0KaW1w
b3J0ZWQgaW4gaGlzIG93biBjb21taXRzLCB0aGF0IHdlcmUgZG9uZSBiecKgIG90aGVyIHBl
b3BsZSwgZS5nLiANCnNoYWRlcnMsIGJ1dCBJIGhhdmVuJ3QgYXVkaXRlZCB0aGF0LiBJIGhh
dmUgc2ltcGx5IHNjcmFwZWQgdGhlIGVtYWlsIA0KYWRkcmVzc2VzIHNob3duIG9uIGNvbW1p
dHMgaW4gdGhlIEdpdCByZXBvc2l0b3J5LCBmb3IgYWxsIGNvbnRyaWJ1dG9yczsgDQpTdGFu
emVrIGhpbXNlbGYgaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGlzIGVtYWlsIGNoYWluLg0KDQpJ
bmRlZWQsIDk1JSBvZiB0aGUgY29tbWl0cyBhcmUgZnJvbSBTdGFuemVrLCBidXQgaGUgc3Rp
bGwgbmVlZHMgDQpwZXJtaXNzaW9uIGZyb20gYWxsIG9mIHlvdSBmb3IgcmUtbGljZW5zaW5n
LCBzaW5jZSBoZSBoYXMgYWxzbyANCnJlLWxpY2Vuc2VkIHRoZSB3b3JrcyBkb25lIGJ5IGFs
bCBvZiB5b3UgKHRoZSA1JSkuIElmIGhlIGRvZXMgbm90IGhhdmUgDQpwZXJtaXNzaW9uIGZy
b20geW91LCB0aGVuIGhlIG11c3QgcmVtb3ZlIGFsbCBvZiB5b3VyIHdvcmtzIGZyb20gdGhl
IA0KcHJvamVjdCwgYW5kIGFsc28gcmVtb3ZlIGFueSBvZiAqaGlzKiB3b3JrIHRoYXQgaXMg
ZGVyaXZlZCBmcm9tIGFsbCBvZiANCnlvdXIgd29ya3MuDQoNCkl0IGlzIGFsc28gbXkgZHV0
eSB0byByZXBvcnQgdG8geW91IGFsbCB0aGF0IHRoZSBBbmRyb2lkIHBvcnQgb2YgDQpEdWNr
U3RhdGlvbiBpcyBjbG9zZWQgc291cmNlLCBhbmQgbWF5IGFsc28gY29udGFpbiBzb21lIG9m
IHlvdXIgd29ya3MuDQoNCk5vdywgdGhlIHJlLWxpY2Vuc2luZyBpdHNlbGYgaXMgbm90IHRo
ZSBvbmx5IGlzc3VlOg0KDQpUaGUgUG9seUZvcm0gbGljZW5zZSwgYW5kIHRoZSBDQyBCWS1O
Qy1ORCBsaWNlbnNlcywgcHJvaGliaXQgDQptb2RpZmljYXRpb25zIHRvIGFueSB2ZXJzaW9u
IHRoYXQgaXMgZGlzdHJpYnV0ZWQsIGFuZCBpdCBwcmV2ZW50cyANCmNvbW1lcmNpYWwgdXNh
Z2Ugb2YgdGhlIGNvZGUuIElmIHlvdSBsb29rIGF0IHRoZSBSRUFETUUgZmlsZSB0aGF0IA0K
U3RhbnplayBub3cgcHJvdmlkZXMsIGhlIGlzIGFsc28gcGxhY2luZyByZXN0cmljdGlvbnMg
KGJ5IGhpcyBvd24gZGVjcmVlIA0Kb3V0c2lkZSBvZiB0aGUgbGljZW5zaW5nIHRlcm1zKSBh
Z2FpbnN0IHRoZSBwcm92aXNpb24gb2YgKmJ1aWxkcyogb3RoZXIgDQp0aGFuIGhpcyBvd24u
DQoNCkluIG90aGVyIHdvcmRzOiBhbHRob3VnaCBEdWNrU3RhdGlvbiBzb3VyY2UgY29kZSBy
ZW1haW5zIHB1YmxpY2x5IA0KYXZhaWxhYmxlLCBTdGFuemVrIGhhcyB0dXJuZWQgdGhlIGNv
ZGUgaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gQW55IA0Kc29mdHdhcmUgdGhhdCBpcyBu
b3QgZW50aXJlbHkgZnJlZS9vcGVuc291cmNlIGlzIGJ5IGRlZmluaXRpb24gDQpwcm9wcmll
dGFyeSBzb2Z0d2FyZS4gUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyByZXNvdXJjZXM6DQoN
Cmh0dHBzOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLXN3LmVuLmh0bWwNCg0KaHR0
cHM6Ly93cml0ZWZyZWVzb2Z0d2FyZS5vcmcvbGVhcm4NCg0KVGhlIGFiaWxpdHkgdG8gdXNl
LCBzdHVkeSwgc2hhcmUgYW5kIG1vZGlmeSBjb2RlIGZyZWVseSBpcyBhbiBpbXBvcnRhbnQg
DQpyaWdodCB0aGF0IGV2ZXJ5b25lIG11c3QgaGF2ZS4gVGhpcyBpbmNsdWRlcyBmb3IgY29t
bWVyY2lhbCBwdXJwb3Nlcy4gSXQgDQppcyB0aGUgcmVhc29uIHdoeSBtdWNoIG9mIG91ciB0
ZWNobm9sb2d5IGV4aXN0cyB0b2RheSBpbiB0aGUgd2F5IHRoYXQgaXQgDQpkb2VzOyB0YWtl
IExpbnV4IGZvciBleGFtcGxlLCB3aGljaCBydW5zIGFsbCBvZiB0aGUgd29ybGQncyBtb3N0
IA0KY3JpdGljYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIGluZGVlZCB0aGUgdW5kZXJwaW5u
aW5nIG9mIHRoZSBBbmRyb2lkIA0Kb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGNvdW50bGVzcyBv
dGhlciBtb2JpbGUgb3BlcmF0aW5nIHN5c3RlbXMgc3VjaCBhcyANClBvc3RNYXJrZXRPUy4N
Cg0KTXVjaCBvZiB0aGUgbW9kZXJuIGludGVybmV0IHRoYXQgd2UgYWxsIGRlcGVuZCB1cG9u
IG5vdyBleGlzdHMgYmVjYXVzZSANCm9mIHRoZSBmcmVlIHNvZnR3YXJlIG1vdmVtZW50LiBU
aGlzIGluY2x1ZGVzIG1hbnkgb2YgdGhlIGZyZWUgYW5kIG9wZW4gDQpzdGFuZGFyZHMgdGhh
dCB3ZSB1c2Ugb24gdGhlIHdlYiB0b2RheS4NCg0KTm93LCBhIGdpdmVuIHNvZnR3YXJlIGF1
dGhvciBoYXMgdGhlIGxlZ2FsIGF1dGhvcml0eSB0byBwdXQgd2hhdGV2ZXIgDQpsaWNlbnNp
bmcgdGhleSB3aXNoIG9uIHRoZWlyIGNvZGUsIGJ1dCBJIGRvIHNheSAqdGhlaXIqIGNvZGUs
IGFuZCB0aGF0IA0KaXMgd2h5IHRoaXMgcmUtbGljZW5zaW5nIGlzIHByb2JsZW1hdGljIGlu
IHRoZSBmaXJzdCBwbGFjZS4NCg0KSW4gc3VtbWFyeTogRHVja1N0YXRpb24gaXMgdmlvbGF0
aW5nIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIA0KTGljZW5zZSwgYnkg
aW5mcmluZ2luZyB1cG9uIHRoZSBjb3B5cmlnaHQgb2YgYWxsIHBhcnRzIGNvbnRyaWJ1dGVk
IHRvIA0KRHVja1N0YXRpb24gYnkgdGhlIHBlb3BsZSBDQydkIG9uIHRoaXMgZW1haWwuDQoN
Ckkgd291bGQgYXNrIHRoYXQgeW91IGFsbCBjb25zaWRlciB0aGlzIGZhY3Q7IHRoZSBpcm9u
eSBpcyB0aGF0IFN0YW56ZWsgDQpoaW1zZWxmIGhhcyBwdWJsaWNseSBleHByZXNzZWQgZGlz
c2F0aXNmYWN0aW9uIHdpdGggdGhlIG51bWJlciBvZiANCmNvbW1lcmNpYWxpc2VkIGZvcmtz
IG9mIER1Y2tTdGF0aW9uLCB5ZXQgaGUgaXMgcHJvdmlkaW5nIGhpcyBvd24gDQpjb21tZXJj
aWFsIHZlcnNpb24gYW5kIHN0ZWFsaW5nIGFsbCBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8g
ZG8gaXQsIA0KcmUtbGljZW5zaW5nIGl0IHdpdGhvdXQgeW91ciBwZXJtaXNzaW9uLg0KDQpJ
J3ZlIENDJ2QgdGhlIFNvZnR3YXJlIEZyZWVkb20gQ29uc2VydmFuY3kgKFNGQykgb24gdGhp
cyBlbWFpbCwgd2hvIGFyZSANCmtub3dzIGZvciBhc3Npc3RpbmcgaW4gZGVhbGluZyB3aXRo
IEdQTCB2aW9sYXRpb25zOyBmb3IgZXhhbXBsZSwgdG9vayBhdCANCnRoZWlyIHdlbGwta25v
d3MgVml6aW8gbGF3c3VpdDoNCg0KaHR0cHM6Ly9zZmNvbnNlcnZhbmN5Lm9yZy9jb3B5bGVm
dC1jb21wbGlhbmNlL3ZpemlvLmh0bWwNCg0KWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlbSBoZXJlOg0KDQpodHRwczovL3NmY29uc2VydmFuY3kub3JnLw0KDQpU
aGUgU0ZDIGFyZSBkZWRpY2F0ZWQgdG8gY2hhbXBpb25pbmcgY29tcHV0ZXIgdXNlciBmcmVl
ZG9tLCBtb3N0IG5vdGFibHkgDQppbiB0aGUgZW5mb3JjZW1lbnQgYWdhaW5zdCBHUEwgdmlv
bGF0aW9ucy4gVGhlIHBlb3BsZSB3aG8gcnVuIHRoZSBTRkMgDQphcmUgYWxsIGxhd3llcnMs
IGFuZCBvZnRlbiBwcm92aWRlIHByby1ib25vIGxlZ2FsIHNlcnZpY2VzIChpdCBzdGFydGVk
IA0KYXMgYW4gb2Zmc2hvb3QgZnJvbSBhbm90aGVyLCBvbGRlciBvcmdhbmlzYXRpb24gY2Fs
bGVkIHRoZSBTb2Z0d2FyZSANCkZyZWVkb20gTGF3IENlbnRlcikuIEkgd291bGQgYWxzbyBw
b2ludCBvdXQgdGhhdCBhIGZvcmsgb2YgRHVja1N0YXRpb24gDQpkb2VzIGluZGVlZCBleGlz
dDoNCg0KaHR0cHM6Ly93d3cubGlicmV0cm8uY29tL2luZGV4LnBocC9jYXRlZ29yeS9zd2Fu
c3RhdGlvbi8NCg0KSSBwb3N0ZWQgYWJvdXQgYWxsIG9mIHRoaXMgb24gbXkgTWFzdG9kb24u
IFBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBwb3N0Og0KDQpodHRwczovL21hcy50by9AbGli
cmVsZWFoLzExMzEzMTU5NDc1MzQyNDg2Nw0KDQpVbmxlc3MgdGhlIER1Y2tTdGF0aW9uIGF1
dGhvciBjaGFuZ2VzIHRoZSBwcm9qZWN0IGJhY2sgdG8gR1BMLCBJIHdvdWxkIA0Kc3VnZ2Vz
dCB0aGF0IHlvdSBhbGwgYm95Y290dCB0aGUgcHJvamVjdCwgYW5kIHRlbGwgb3RoZXJzIHRv
IGRvIHRoZSANCnNhbWU7IHlvdSBjb3VsZCBzZW5kIGFsbCBmdXR1cmUgY29udHJpYnV0aW9u
cyB0byBTd2FuU3RhdGlvbiBpbnN0ZWFkLCANCndoaWNoIGlzIHBhcnQgb2YgbGlicmV0cm8u
IEkgd291bGQgc3VnZ2VzdCB0aGF0IGFsbCBmdXR1cmUgd29ya3MgZ28gdG8gYSANCmZvcmsg
KGNvdWxkIGJlIFN3YW5TdGF0aW9uKSwgaW5zdGVhZCBvZiBEdWNrU3RhdGlvbiwgd2hpbGUg
c3RpbGwgDQpwZXJtaXR0aW5nIFN0YW56ZWsgdG8gY29udHJpYnV0ZTsgdGhpcyB3YXksIGFu
eSBmdXR1cmUgYWJ1c2l2ZSANCnJlLWxpY2Vuc2luZyBjb3VsZCBub3QgcmVhbGlzdGljYWxs
eSBvY2N1ci4gVGhlIHJlYXNvbiBJIHNheSB0aGlzLCBpcyANCmJlY2F1c2UgYmFzZWQgb24g
bXkgb3duIHJlc2VhcmNoLCBpdCBzZWVtcyB0aGF0IFN0YW56ZWsncyBiaW9zIGFnYWluc3Qg
DQp0aGUgR1BMIGhhcyBleGlzdGVkIGZvciBzb21lIHRpbWUsIHNvIEknbSB1bmNlcnRhaW4g
YXMgdG8gd2hldGhlciBoZSANCmNvdWxkIGJlIHRydXN0ZWQgaW4gY2hhcmdlIG9mIGEgcHVi
bGljIHByb2plY3QuDQoNCkFueXdheSwgdGhhdCdzIGFsbCBJIHdhbnRlZCB0byBzYXkuIEkn
bSBub3QgaW52b2x2ZWQgd2l0aCB0aGUgDQpkZXZlbG9wbWVudCBvZiBEdWNrU3RhdGlvbiBt
eXNlbGYgKEkgZG9uJ3QgZXZlbiB1c2UgaXQsIHRob3VnaCBJIGRvIA0KZW5qb3kgdGhlIFBs
YXlTdGF0aW9uIGFuZCBoYXZlIGEgbW9kZGVkIFBTMSB3aXRoIFhzdGF0aW9uLCBpdCdzIG5l
YXRvKS4NCg0KSGFyZHdhcmUgcHJlc2VydmF0aW9uIGlzIGltcG9ydGFudCwgYW5kIGl0J3Mg
dGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IA0KdGhlc2UgZW11bGF0b3JzIHJlbWFpbiBmcmVl
IGFuZCBvcGVuIHNvdXJjZSwgc28gdGhhdCBwZW9wbGUgaW4gdGhlIA0KZnV0dXJlIGNhbiBh
bHdheXMgZGV2ZWxvcCB0aGVtIGFuZCBiYXNlZCBuZXcgd29ya3Mgb2ZmIG9mIHRoZW0uDQoN
Ci0tIA0KQ29tcGFueSBkaXJlY3RvciwgTWluaWZyZWUgTHRkDQpSZWdpc3RlcmVkIGluIEVu
Z2xhbmQsIE5vLiA5MzYxODI2IHwgVkFUIE5vLiBHQjIwMjE5MDQ2Mg0KUmVnaXN0ZXJlZCBP
ZmZpY2U6IDE5IEhpbHRvbiBSb2FkLCBDYW52ZXkgSXNsYW5kLCBFc3NleCBTUzggOVFBLCBV
Sw0KDQo=
--------------hpYhMnPpZcss5MAku0wV33Xb
Content-Type: application/pgp-keys; name="OpenPGP_0x5C654067D383B1FF.asc"
Content-Disposition: attachment; filename="OpenPGP_0x5C654067D383B1FF.asc"
Content-Description: OpenPGP public key
Content-Transfer-Encoding: quoted-printable
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
ER7BLIU=3D
=3D29JQ
-----END PGP PUBLIC KEY BLOCK-----
--------------hpYhMnPpZcss5MAku0wV33Xb--
--------------30OTLipcrolSqLl0BpCJMKiW--
--------------6Q1qviZqKVkpz644tKfprH0E
Content-Type: application/pgp-signature; name="OpenPGP_signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="OpenPGP_signature.asc"
-----BEGIN PGP SIGNATURE-----
wsF5BAABCAAjFiEEi7H30oz3aW2/T3GSXGVAZ9ODsf8FAmble3kFAwAAAAAACgkQXGVAZ9ODsf+M
1hAAu4cYY0zpQramqNv0eCJNQLzSV1RPcn7Dexgqa31Se7Sy8aLjRPD14oaiZSDRjTkT+ZhN805i
Nk7nOySDgk39KeycIrvDjscS3AKnVVdoO2MwIsEdBK3C7jJelCU6Azo+2ET4YUiSl8mMKooXwKcT
DT7Vcz3N8qktbHCBukvSu2SneRcnxOB6RAUlaOORE/OLtwSEdvGgRz2kZfVuqP5QZXRnlI1dzLob
xEj6y2jvSdfuHcwUFnaot1U24SQl9xyQ/lXRePEF6WfxlHTNCW6niNcWjr+u93XqURxdo1lpG0t3
ETA2DLYln6FCfhyjjuNErgVo35gqDCL+ye8VApV3IPnYMTOhZkz58nbve0Nw9eTIGFYWzGQ/mg5H
+H9lPqcrXGc60G+R5JvC284U6m6Bte8ToTatIDtBD42NKzCcKPxrRmSrOE89BSbjobzL2KyMtqAb
VDAMsWlN3shipHPctDqu0ys257i3zsWqUGHQPFFs/BfcofG9XVlWhwVYc/JcrTxWVdAPfZ+rJatg
HfZzMs9VGFVnKhFixYpDWKLcTgGeTMCakMO0mn/bTbG8keLIX2zU+zipzS0KHKzR5w6u0hrV0+ln
VH9nXFlhyrHCsoxHfNcWmxpxQCoBJikdKD4yedoPcnRTF4MwUYAiaeJZWLBxeVz37nGV8MYpQFcf
G1g=
=nz/q
-----END PGP SIGNATURE-----
--------------6Q1qviZqKVkpz644tKfprH0E--
Markdown file for this page: https://vimuser.org/duckstation.md
Subscribe to RSS for this site
This HTML page was generated by the Untitled Static Site Generator.