diff --git a/.github/SOURCEMOD-LICENSE.txt b/.github/SOURCEMOD-LICENSE.txt deleted file mode 100644 index 636b54f0d..000000000 --- a/.github/SOURCEMOD-LICENSE.txt +++ /dev/null @@ -1,38 +0,0 @@ -SOURCEMOD LICENSE INFORMATION -VERSION: JUNE-13-2008 ------------------------------ - -SourceMod is licensed under the GNU General Public License, version 3. - -As a special exception, AlliedModders LLC gives you permission to link the code -of this program (as well as its derivative works) to "Half-Life 2," the "Source -Engine," the "SourcePawn JIT," and any Game MODs that run on software by the -Valve Corporation. You must obey the GNU General Public License in all -respects for all other code used. Additionally, AlliedModders LLC grants this -exception to all derivative works. - -As an additional special exception to the GNU General Public License 3.0, -AlliedModders LLC permits dual-licensing of DERIVATIVE WORKS ONLY (that is, -SourcePawn/SourceMod Plugins and SourceMod Extensions, or any software built -from the SourceMod SDK or header files) under the GNU General Public License -version 2 "or any higher version." As such, you may choose for your derivative -work(s) to be compatible with the GNU General Public License version 2 as long -as it is also compatible with the GNU General Public License version 3, via the -"or any higher version" clause. This is intended for compatibility with other -software. - -As a final exception to the above, any derivative works created prior to this -date (July 31, 2007) may be exclusively licensed under the GNU General Public -License version 2 (without an "or any higher version" clause) if and only if -the work was already GNU General Public License 2.0 exclusive. This clause is -provided for backwards compatibility only. - -A copy of the JIT License is available in JIT.txt. -A copy of the GNU General Public License 2.0 is available in GPLv2.txt. -A copy of the GNU General Public License 3.0 is available in GPLv3.txt. - -SourcePawn is Copyright (C) 2006-2008 AlliedModders LLC. All rights reserved. -SourceMod is Copyright (C) 2006-2008 AlliedModders LLC. All rights reserved. -Pawn and SMALL are Copyright (C) 1997-2008 ITB CompuPhase. -Source is Copyright (C) Valve Corporation. -All trademarks are property of their respective owners in the US and other \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 9351e1903..d964615d3 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -122,7 +122,7 @@ jobs: org.opencontainers.image.url=https://sbpp.github.io org.opencontainers.image.source=https://github.com/sbpp/sourcebans-pp org.opencontainers.image.documentation=https://sbpp.github.io/getting-started/quickstart-docker/ - org.opencontainers.image.licenses=CC-BY-NC-SA-3.0 AND GPL-3.0-or-later + org.opencontainers.image.licenses=Elastic-2.0 org.opencontainers.image.vendor=SourceBans++ Dev Team org.opencontainers.image.revision=${{ github.sha }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2c16e84cf..3ca3a144d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -44,8 +44,56 @@ jobs: cp game/addons/sourcemod/plugins/*.smx "/tmp/${pkg}/common/addons/sourcemod/plugins/" cp -R game/addons/sourcemod/configs "/tmp/${pkg}/common/addons/sourcemod/" cp -R game/addons/sourcemod/translations "/tmp/${pkg}/common/addons/sourcemod/" + # GPLv3 §4 requires the licence text be conveyed with every + # redistribution of the covered work. Ship it at the tarball + # root so a self-hoster who only extracts the addons/ subtree + # still gets the licence side-by-side with the .smx files. + # The file is renamed from `LICENSE-plugins.txt` (the + # disambiguated source-tree name — the source tree carries + # both LICENSE.txt for the web panel + LICENSE-plugins.txt + # for the plugins) to the GPL-convention `LICENSE.txt` for + # the tarball root: GPLv3-licensed releases by convention + # ship the licence as `LICENSE` / `LICENSE.txt` next to the + # binaries, NOT under a non-default name. Operators + # extracting the plugin tarball expect that convention; an + # operator who extracts both tarballs into the same parent + # dir would clobber the webpanel zip's LICENSE.txt with the + # plugins' GPLv3 text, but the two install paths are + # disjoint by design (panel → web server's docroot, + # plugins → game server's `addons/sourcemod/`) so the + # collision is theoretical. + cp LICENSE-plugins.txt "/tmp/${pkg}/LICENSE.txt" + # THIRD-PARTY-NOTICES.txt carries the SourceBans 1.4.11 + + # SourceComms upstream-lineage attributions the plugins + # inherit (sbpp_comms.sp descends from SourceComms; the + # rest of the .sp files descend from the original + # SourceBans 1.4.x plugin set). Ship it next to LICENSE.txt + # so the GPLv3 §5 "preserve all notices" obligation is + # discoverable without cracking open the tarball's + # per-file headers. + cp THIRD-PARTY-NOTICES.txt "/tmp/${pkg}/THIRD-PARTY-NOTICES.txt" tar -C /tmp -czf "${pkg}.tar.gz" "${pkg}" + # Smoke-check that the required licence files actually landed + # in the tarball. Future shell refactors that silently drop + # the cp commands above would ship a GPLv3-non-compliant + # tarball; fail the release instead. + - name: Verify required files are bundled in the plugin tarball + run: | + pkg="sourcebans-pp-${GITHUB_REF_NAME}.plugin-only" + missing=0 + for f in \ + "${pkg}/LICENSE.txt" \ + "${pkg}/THIRD-PARTY-NOTICES.txt"; do + if ! tar -tzf "${pkg}.tar.gz" "${f}" >/dev/null 2>&1; then + echo "::error::Plugin tarball is missing ${f}; release would ship GPLv3-non-compliant." + missing=1 + fi + done + if [ "$missing" -ne 0 ]; then + exit 1 + fi + - uses: actions/upload-artifact@v4 with: name: plugin @@ -80,6 +128,26 @@ jobs: run: | pkg="sourcebans-pp-${GITHUB_REF_NAME}.webpanel-only" cp -R web "/tmp/${pkg}" + # ELv2 "Notices" requires preserving the licence text + the + # ELASTIC LICENSE attribution notice when redistributing the + # Software. THIRD-PARTY-NOTICES.txt carries the + # upstream-lineage + bundled-third-party attributions a + # self-hoster needs to comply with (LightOpenID MIT, + # SourceBans 1.4.x + SourceComms + theme.conf.php + # CC-BY-NC-SA 3.0 historical attributions per the file's + # preamble). LICENSE-plugins.txt ships alongside so the + # install wizard's step 1 promise ("LICENSE-plugins.txt + # shipped at the root of this install" — see + # `web/install/pages/page.1.php`) is honoured even though + # the webpanel zip doesn't ship the plugins themselves; + # this also lets a self-hoster who only ever pulls the + # webpanel zip discover the GPLv3 terms governing the + # paired plugin tarball without a docs round-trip. All + # three files ship at the package root next to README.md / + # install/. + cp LICENSE.txt "/tmp/${pkg}/LICENSE.txt" + cp LICENSE-plugins.txt "/tmp/${pkg}/LICENSE-plugins.txt" + cp THIRD-PARTY-NOTICES.txt "/tmp/${pkg}/THIRD-PARTY-NOTICES.txt" cat > "/tmp/${pkg}/configs/version.json" < # `src/`); the legacy libs/Smarty.class.php is only a back- # compat shim for non-composer callers, which the panel isn't. - - name: Verify vendor/ is bundled in the zip + # - LICENSE.txt + LICENSE-plugins.txt + THIRD-PARTY-NOTICES.txt + # — ELv2 "Notices" compliance gate + the install wizard's + # step 1 contract (`web/install/pages/page.1.php` tells + # the user LICENSE-plugins.txt is "shipped at the root of + # this install" — without it the user-visible promise lies). + # A release that silently drops any of the three makes every + # downstream redistribution non-compliant. + - name: Verify required files are bundled in the zip run: | pkg="sourcebans-pp-${GITHUB_REF_NAME}.webpanel-only" missing=0 for f in \ "${pkg}/includes/vendor/autoload.php" \ - "${pkg}/includes/vendor/smarty/smarty/src/Smarty.php"; do + "${pkg}/includes/vendor/smarty/smarty/src/Smarty.php" \ + "${pkg}/LICENSE.txt" \ + "${pkg}/LICENSE-plugins.txt" \ + "${pkg}/THIRD-PARTY-NOTICES.txt"; do if ! unzip -l "${pkg}.zip" "${f}" >/dev/null 2>&1; then echo "::error::Missing required artifact file in ${pkg}.zip: ${f}" missing=1 fi done if [ "$missing" -ne 0 ]; then - echo "::error::Webpanel zip is missing bundled composer dependencies; release would ship broken to self-hosters." + echo "::error::Webpanel zip is missing required bundled files; release would ship broken or ELv2-non-compliant to self-hosters." exit 1 fi diff --git a/AGENTS.md b/AGENTS.md index 69f7a49a2..cd5f7e64b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2611,11 +2611,13 @@ the spec, target a 1920px viewport, not 1440px. ### Contributor License Agreement gate (`web/**`) Pull requests that touch `web/**` are gated on a signed Contributor -License Agreement. The web panel is dual-licensable (free for hobby / -community use under CC BY-NC-SA 3.0; separate commercial licence for -production use by hosting providers), and the CLA is the mechanism -that lets the maintainer relicense future contributions without -contacting every contributor individually. +License Agreement. The web panel is dual-licensable (free under the +Elastic License 2.0 for hobby / community / self-hosted use; separate +commercial licence for game-server hosts offering the panel as a +managed service to third parties — see [`LICENSE.txt`](LICENSE.txt) +and the README "License" section for the contract details), and the +CLA is the mechanism that lets the maintainer relicense future +contributions without contacting every contributor individually. - Agreement text: [`CLA.md`](CLA.md). Ten sections, ~1 page. Contributor keeps copyright; maintainer gets a perpetual, irrevocable, worldwide, @@ -2655,10 +2657,20 @@ contacting every contributor individually. `custom-pr-sign-comment`, the `if:` matches against the same string to gate execution, and CLA.md §10 is what the contributor is told to type. Drift between any two silently breaks the signing flow. -- Historical contributors haven't signed; their pre-CLA web-panel - contributions aren't covered by the new grant. Retroactive sign-off - is a separate piece of work (opt-in follow-up) and isn't blocked - by the workflow being in place. +- Historical-contributor coverage was the precondition for the + `goals#4` ELv2 relicense and was resolved by the `goals#3` audit: + every pre-CLA `web/**` contribution of substance was authored by + `rumblefrog`, who as the project maintainer is also the licensor + under ELv2. The handful of small one-off external PRs from before + the CLA workflow landed either (a) survived intact through the + v2.0 panel rewrite (in which case their authors are listed on + `goals#3`'s audit and the CLA's §3(b) relicense grant covers them + going forward — pending sign-off), or (b) were removed during the + v2.0 rewrite (in which case the question is moot; `goals#5` Route + B rewrites covered the dead-code surface). Future inbound PRs are + covered by the workflow as designed. Retroactive sign-off for the + surviving-author set is still an opt-in follow-up but is not on + the critical path for the ELv2 relicense. ## Anti-patterns (do NOT reintroduce) @@ -2670,8 +2682,8 @@ contacting every contributor individually. ```php '` HTML blobs at the top of admin page handlers (`web/pages/admin.edit..php`) → build a diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index a12cc8da5..df69b702a 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -40,7 +40,10 @@ plugins are stable and updated less often. ├── AGENTS.md Conventions for AI agents / contributors ├── CHANGELOG.md Release notes ├── docs/ Starlight docs site (install / upgrade / configure) -└── LICENSE.md +├── LICENSE.txt Elastic License 2.0 (web panel) +├── LICENSE-plugins.txt GPLv3 (SourceMod plugins) +├── CLA.md Contributor License Agreement (web/** PRs) +└── THIRD-PARTY-NOTICES.txt ``` ## Web panel (`web/`) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb246546f..b1826ca9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,14 @@ Legend: > Custom themes that forked the pre-2.0 default keep working but > render in a compatibility mode; see the migration notes in the > release for details. +> +> **The web panel licence has changed** from CC BY-NC-SA 3.0 to the +> Elastic License 2.0. Hobby / community self-hosting stays free +> (most operators see no operational change). Offering SourceBans++ +> to third parties as a hosted or managed service is now reserved +> by ELv2 and needs a separate commercial licence. SourceMod +> plugins remain GPLv3. Full breakdown: +> [Upgrading 1.8 → 2.0 — Licence change](https://sbpp.github.io/updating/1-8-to-2-0/#licence-change). ``` 01. * Rebuilt default theme: drawer-based admin nav, command palette (Ctrl/Cmd-K), light/dark/system theming, accessibility-first diff --git a/CLA.md b/CLA.md index cf950d057..a2e2c49ef 100644 --- a/CLA.md +++ b/CLA.md @@ -58,10 +58,10 @@ tiers of sublicensees. For clarity, the licence granted in Section 3(b) is the practical mechanism by which the Maintainer may dual-license the Project (for -example, offering it under both a community open-source licence and a -separate commercial licence) and by which the Maintainer may relicense -the Project under different terms in the future without seeking your -further permission. +example, offering it under both the Elastic License 2.0 +[`LICENSE.txt`](LICENSE.txt) and a separate commercial licence) and +by which the Maintainer may relicense the Project under different +terms in the future without seeking your further permission. ## 4. Patent Grant @@ -126,8 +126,9 @@ This Agreement applies **only** to Contributions to the `web/` directory of the Project. Contributions to other parts of the SourceBans++ repository, including the SourceMod plugins under `game/addons/sourcemod/`, are governed by the licence terms of those -subprojects (currently GPLv3 for the SourceMod plugins) and are not -covered by this Agreement. +subprojects (currently GPLv3 for the SourceMod plugins, see +[`LICENSE-plugins.txt`](LICENSE-plugins.txt)) and are not covered by +this Agreement. ## 9. Miscellaneous @@ -147,3 +148,25 @@ pull request that the project's CLA bot has flagged: Your signature is recorded automatically by the bot, applies to all future Contributions you make to the Project, and is effective as of the date the bot records it. + +### Pre-CLA contribution history + +Contributions made to the Project before this CLA workflow landed +(initial workflow rollout in `sbpp/goals#4` Phase 2) are addressed by +the audit recorded at +[`sbpp/goals#3`](https://github.com/sbpp/goals/issues/3). That audit +confirmed that the surviving substantive `web/**` contributions +prior to the CLA workflow are attributable to the project +maintainer ([@rumblefrog](https://github.com/rumblefrog)), whose +authorship clears the path for the +[`sbpp/goals#4`](https://github.com/sbpp/goals/issues/4) relicense +from CC BY-NC-SA 3.0 to the Elastic License 2.0 without contacting +third-party contributors individually. The handful of small one-off +external pre-CLA `web/**` PRs identified by the audit are listed in +that issue; their authors are welcome to retroactively sign this +Agreement against any subsequent PR so the §3(b) relicense grant +applies to their historical contributions too, but the project's +ELv2 standing does not depend on those retroactive signatures. + +This subsection is informational and does not modify the substantive +terms of the Agreement above. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8ba6699fa..275a7112d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,11 +20,13 @@ the project's developer guides. ## Contributor License Agreement (web panel only) The SourceBans++ **web panel** (everything under -[`web/`](web/)) is offered under a dual-licence model: free for hobby -and community use under [CC BY-NC-SA 3.0](LICENSE.md), and under a -separate commercial licence for production use by game-server hosting -companies that bundle SourceBans++ as a paid feature (see -[README.md](README.md#license) for the commercial-licence contact). +[`web/`](web/)) is offered under a dual-licence model: free under the +[Elastic License 2.0](LICENSE.txt) for hobby use, community use, and +every redistributor that isn't operating the panel as a hosted / +managed service to third parties; and under a separate commercial +licence for game-server hosting companies that bundle SourceBans++ as +a paid feature (see [README.md](README.md#license) for the +commercial-licence contact). To make that arrangement workable, contributions to `web/**` from anyone other than the project maintainer are accepted under a @@ -61,18 +63,20 @@ PR you open against this repo, and is recorded on the [`.github/workflows/cla.yml`](.github/workflows/cla.yml) is the source of truth. - **PRs that only touch SourceMod plugins** under - `game/addons/sourcemod/**` — those stay under GPLv3 (strong - copyleft) and aren't part of the dual-licence arrangement. If your - PR mixes `web/**` and plugin files, the CLA check fires because of - the `web/**` half; signing once unblocks both. + `game/addons/sourcemod/**` — those stay under + [GPLv3](LICENSE-plugins.txt) (strong copyleft) and aren't part of + the dual-licence arrangement. If your PR mixes `web/**` and plugin + files, the CLA check fires because of the `web/**` half; signing + once unblocks both. ### Why a CLA -The web panel is offered free for hobby and community use, and under -a separate commercial licence for production use. The CLA gives the -maintainer the right to offer both — without it, every contributor -would need to be contacted individually for every future relicensing -decision, which doesn't scale. +The web panel is offered free under the Elastic License 2.0 for +hobby and community use, and under a separate commercial licence for +game-server hosts offering the panel as part of a managed-service +product. The CLA gives the maintainer the right to offer both — +without it, every contributor would need to be contacted individually +for every future relicensing decision, which doesn't scale. If you have legal questions about the CLA, please open an issue or reach out via the [Discord](https://discord.gg/tzqYqmAtF5) before diff --git a/.github/GPLv3 b/LICENSE-plugins.txt similarity index 100% rename from .github/GPLv3 rename to LICENSE-plugins.txt diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 7f3706153..000000000 --- a/LICENSE.md +++ /dev/null @@ -1,108 +0,0 @@ -# Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported - -> See [`THIRD-PARTY-NOTICES.txt`](THIRD-PARTY-NOTICES.txt) for vendored -> third-party components and their separate licenses. - -CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. - -## License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -### 1. Definitions - -a. __"Adaptation"__ means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - -b. __"Collection"__ means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - -c. __"Distribute"__ means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - -d. __"License Elements"__ means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. - -e. __"Licensor"__ means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - -f. __"Original Author"__ means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - -g. __"Work"__ means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - -h. __"You"__ means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - -i. __"Publicly Perform"__ means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - -j. __"Reproduce"__ means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - -### 2. Fair Dealing Rights. - -Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -### 3. License Grant. - -Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - -b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - -c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - -d. to Distribute and Publicly Perform Adaptations. - -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(e). - -### 4. Restrictions. - -The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. - -b. You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. - -c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works. - -d. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - -e. For the avoidance of doubt: - - 1. __Non-waivable Compulsory License Schemes__. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - - 2. __Waivable Compulsory License Schemes__. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, - - 3. __Voluntary License Schemes__. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use that is otherwise than noncommercial as permitted under Section 4(c). - -f. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - -### 5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -### 6. Limitation on Liability. - -EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -### 7. Termination - -a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - -b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - -### 8. Miscellaneous - -a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - -b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - -c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - -d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. - -e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. - -f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. - -> Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. -> -> Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. -> -> Creative Commons may be contacted at . diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..809108b85 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,93 @@ +Elastic License 2.0 + +URL: https://www.elastic.co/licensing/elastic-license + +## Acceptance + +By using the software, you agree to all of the terms and conditions below. + +## Copyright License + +The licensor grants you a non-exclusive, royalty-free, worldwide, +non-sublicensable, non-transferable license to use, copy, distribute, make +available, and prepare derivative works of the software, in each case subject to +the limitations and conditions below. + +## Limitations + +You may not provide the software to third parties as a hosted or managed +service, where the service provides users with access to any substantial set of +the features or functionality of the software. + +You may not move, change, disable, or circumvent the license key functionality +in the software, and you may not remove or obscure any functionality in the +software that is protected by the license key. + +You may not alter, remove, or obscure any licensing, copyright, or other notices +of the licensor in the software. Any use of the licensor’s trademarks is subject +to applicable law. + +## Patents + +The licensor grants you a license, under any patent claims the licensor can +license, or becomes able to license, to make, have made, use, sell, offer for +sale, import and have imported the software, in each case subject to the +limitations and conditions in this license. This license does not cover any +patent claims that you cause to be infringed by modifications or additions to +the software. If you or your company make any written claim that the software +infringes or contributes to infringement of any patent, your patent license for +the software granted under these terms ends immediately. If your company makes +such a claim, your patent license ends immediately for work on behalf of your +company. + +## Notices + +You must ensure that anyone who gets a copy of any part of the software from you +also gets a copy of these terms. + +If you modify the software, you must include in any modified copies of the +software prominent notices stating that you have modified the software. + +## No Other Rights + +These terms do not imply any licenses other than those expressly granted in +these terms. + +## Termination + +If you use the software in violation of these terms, such use is not licensed, +and your licenses will automatically terminate. If the licensor provides you +with a notice of your violation, and you cease all violation of this license no +later than 30 days after you receive that notice, your licenses will be +reinstated retroactively. However, if you violate these terms after such +reinstatement, any additional violation of these terms will cause your licenses +to terminate automatically and permanently. + +## No Liability + +*As far as the law allows, the software comes as is, without any warranty or +condition, and the licensor will not be liable to you for any damages arising +out of these terms or the use or nature of the software, under any kind of +legal claim.* + +## Definitions + +The **licensor** is the entity offering these terms, and the **software** is the +software the licensor makes available under these terms, including any portion +of it. + +**you** refers to the individual or entity agreeing to these terms. + +**your company** is any legal entity, sole proprietorship, or other kind of +organization that you work for, plus all organizations that have control over, +are under the control of, or are under common control with that +organization. **control** means ownership of substantially all the assets of an +entity, or the power to direct its management and policies by vote, contract, or +otherwise. Control can be direct or indirect. + +**your licenses** are all the licenses granted to you for the software under +these terms. + +**use** means anything you do with the software requiring one of your licenses. + +**trademark** means trademarks, service marks, and similar rights. diff --git a/README.md b/README.md index 97cb6c947..3088a5316 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

GitHub release - License: CC BY-NC-SA 3.0 + License: Elastic 2.0 GitHub issues GitHub All Releases Discord @@ -63,8 +63,9 @@ modernization work landing across v2.x. [![Sponsor on GitHub](https://img.shields.io/github/sponsors/sbpp?style=flat-square&logo=github&label=Sponsor%20on%20GitHub)](https://github.com/sponsors/sbpp) -**Game-server hosts and SourceBans++-as-a-feature providers:** -production / commercial use of the web panel is covered by a +**Game-server hosts and SourceBans++-as-a-feature providers offering +the panel as a hosted or managed service to third parties:** that +use case is reserved by the Elastic License 2.0 and covered by a separate commercial license; see **License** below. @@ -73,10 +74,25 @@ separate commercial license; see **License** below. ## License -- **SourceMod plugins:** [GPLv3](https://raw.githubusercontent.com/sbpp/sourcebans-pp/v1.x/.github/GPLv3). -- **Web panel:** [CC BY-NC-SA 3.0](LICENSE.md). - Hobby / community use is free under the linked terms; for - production / commercial use (e.g. game-server hosting companies - bundling SourceBans++ as a paid feature), a separate commercial - license is available. Reach out via the contact link on the - [sponsor page](https://sbpp.github.io/sponsor/) or Discord. +- **Web panel** (everything under `web/`): [Elastic License 2.0](LICENSE.txt). + You may use, copy, modify, create derivative works of, and + redistribute the panel — for hobby use, community use, running it + for your own clan / network, bundling it into a Docker image, + publishing a Pterodactyl egg, packaging it for a distro, all of + that stays free. What ELv2 reserves is the right to **provide the + panel as a hosted or managed service to third parties** (the + classic "SourceBans++-as-a-feature" upsell from a game-server + hosting business); for that, a separate commercial license is + available. Open a thread in the + [Commercial licensing discussion category](https://github.com/sbpp/sourcebans-pp/discussions/categories/commercial-licensing) + or DM [@rumblefrog](https://github.com/rumblefrog) on the + SourceBans++ [Discord](https://discord.gg/tzqYqmAtF5) (a dedicated + inbox is on the roadmap once volume warrants it). +- **SourceMod plugins** (everything under `game/addons/sourcemod/`): + [GPLv3](LICENSE-plugins.txt). Copyleft is the right tool there — + the managed-service loophole the Elastic License closes for the + panel doesn't exist for SourcePawn plugins that run in-process on + the customer's game server. +- **Vendored third-party code** (LightOpenID, TinyMCE, the + SourceBans 1.4.x lineage, etc.) keeps its own license terms; see + [`THIRD-PARTY-NOTICES.txt`](THIRD-PARTY-NOTICES.txt). diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt index ee0b1ae2b..6ed879498 100644 --- a/THIRD-PARTY-NOTICES.txt +++ b/THIRD-PARTY-NOTICES.txt @@ -2,13 +2,23 @@ SourceBans++ Third-Party Notices ================================ The SourceBans++ panel (the `web/` subdirectory) is licensed under the -Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported -License — see `LICENSE.md` for the full text. +Elastic License 2.0 — see `LICENSE.txt` for the full text. The bundled +SourceMod plugins (`game/addons/sourcemod/`) are licensed under the +GNU General Public License version 3 — see `LICENSE-plugins.txt`. This file lists upstream projects whose code, schema, or other works are present in this distribution and the attributions owed to their authors per their respective licences. +Pre-Elastic-License-2.0 (CC-BY-NC-SA 3.0) history note: prior to +`goals#4`, the web panel rode CC BY-NC-SA 3.0. The relicense to ELv2 +was made under the authority of the contributor licence agreement +(`CLA.md` §3(b)) and the audit recorded at `goals#3`. The InterWave +Studios + SourceBans Team / GameConnect attributions below ride that +historical CC-BY-NC-SA 3.0 lineage; they are preserved here as a +matter of courtesy and to honour the spirit of CC BY-NC-SA 3.0 §4(c) +as it applied to the panel at the time those upstreams were merged. + If you are a downstream consumer (theme fork, distribution maintainer, vendor) and notice an attribution missing here, please open an issue at https://github.com/sbpp/sourcebans-pp/issues — we @@ -60,16 +70,47 @@ to honour the spirit of CC BY-NC-SA 3.0 §4(c). GitHub: https://github.com/d-ai/SourceComms Licensed under: GNU General Public License version 3 or later -The communications-management surfaces of the panel — the public -`?p=commslist` page, the admin `?p=admin&c=comms` moderation queue, -the `?p=admin&c=comms§ion=search` advanced filter, and the -`:prefix_comms` schema — descend from Alexandr Duplishchev's -SourceComms plugin (a SourceBans 1.4.11 sister-plugin that added -mute / gag / silence tracking to the panel's ban-management UI). +The SourceComms project consists of two parts: a SourceMod plugin +(server-side mute / gag / silence enforcement) and a paired web +panel surface (a SourceBans 1.4.11 sister add-on that added +moderation UI for comm blocks). + +This repository's SourceMod-plugin lineage of SourceComms +(`sbpp_comms.sp` under `game/addons/sourcemod/scripting/`) is a +derivative work and remains under GPLv3 in lockstep — see +`LICENSE-plugins.txt`. That continuity is explicit and load- +bearing. + +The web panel's communications surfaces — the public +`?p=commslist` page, the admin `?p=admin&c=comms` moderation +queue, the `?p=admin&c=comms§ion=search` advanced filter, and +the `:prefix_comms` schema — were inspired by and historically +forked from the SourceComms panel add-on. The v2.0 panel +rewrite (`goals#3` per-file audit + `goals#5` Route B rewrites) +re-implemented every surface against the new typed View DTO + +JSON API + vanilla JS chrome stack so that no SourceComms-panel +source expression survives in the rendered v2.0 chrome. The +remaining continuities are: + + - Table name (`:prefix_comms`) and column-name conventions + (schema layout is factual, not expressive, but the lineage + is documented defensively). + - The `BanType` / `BanRemoval` letter-code conventions shared + with the bans surfaces (also descended from SourceBans 1.4.x + rather than SourceComms specifically). + - The general workflow concept of "operator types a SteamID + + reason + duration, the plugin enforces the block, the panel + surfaces the audit trail." This is a workflow concept, not + code. -The PHP surfaces have been rewritten in v2.0 idioms (typed View -DTOs, JSON API actions, vanilla JS chrome) but the data model and -the filter semantics descend from SourceComms. +The attribution above is preserved to honour the spirit of +GPLv3 §5 / §7 ("preserve all notices") even though the v2.0 +panel surfaces no longer fall under GPLv3's "modified version" +test on the substantive-source-expression analysis. If a +downstream consumer reviewing this attribution disagrees with +that analysis on technical grounds, please open an issue at +https://github.com/sbpp/sourcebans-pp/issues — the project +treats this kind of question seriously. -------------------------------------------------------------------- 3. InterWave Studios — default theme chrome (origin) @@ -110,7 +151,7 @@ sole intentional global-namespace class allowed in `web/includes/`. The MIT license terms apply only to the LightOpenID file itself; the -rest of the panel is governed by `LICENSE.md`. +rest of the panel is governed by `LICENSE.txt`. MIT License ----------- @@ -159,7 +200,56 @@ editor in. A future PR will remove the directory once the fork-fallout window has elapsed. -------------------------------------------------------------------- -6. Composer dependencies (`web/composer.json`) +6. SourceMod (runtime dependency of the bundled plugins) +-------------------------------------------------------------------- + + Copyright (C) 2006-present AlliedModders LLC. All rights reserved. + Project URL: https://www.sourcemod.net/ + Licensed under: GNU General Public License version 3 + (with the AlliedModders link-exception below) + +The SourceMod plugins this repository ships +(`game/addons/sourcemod/scripting/*.sp`) compile against and link +into SourceMod's SDK at runtime. SourceMod itself is not bundled +in this repository — operators install it separately on each game +server. The plugins are GPLv3-licensed (`LICENSE-plugins.txt`), +and that licence is what governs redistribution of the plugin +source / .smx artifacts. + +For completeness, the AlliedModders LLC link-exception notice that +permits SourceMod-derivative-works to link into Source-engine code +is reproduced verbatim below. This exception applies to SourceMod +itself and to its derivative works (SourcePawn plugins and +SourceMod Extensions); the panel's plugin set falls into the +"derivative works" category: + + As a special exception, AlliedModders LLC gives you permission + to link the code of this program (as well as its derivative + works) to "Half-Life 2," the "Source Engine," the "SourcePawn + JIT," and any Game MODs that run on software by the Valve + Corporation. You must obey the GNU General Public License in all + respects for all other code used. Additionally, AlliedModders + LLC grants this exception to all derivative works. + + As an additional special exception to the GNU General Public + License 3.0, AlliedModders LLC permits dual-licensing of + DERIVATIVE WORKS ONLY (that is, SourcePawn/SourceMod Plugins and + SourceMod Extensions, or any software built from the SourceMod + SDK or header files) under the GNU General Public License version + 2 "or any higher version." As such, you may choose for your + derivative work(s) to be compatible with the GNU General Public + License version 2 as long as it is also compatible with the GNU + General Public License version 3, via the "or any higher version" + clause. This is intended for compatibility with other software. + +The full GPLv3 text is at `LICENSE-plugins.txt` in this repository +and at https://www.gnu.org/licenses/gpl-3.0.html upstream. The +AlliedModders link-exception notice originates from AlliedModders +LLC and is reproduced here under the spirit of GPLv3 §7 (additional +permissions). + +-------------------------------------------------------------------- +7. Composer dependencies (`web/composer.json`) -------------------------------------------------------------------- The panel's runtime PHP dependencies (`smarty/smarty`, `lcobucci/jwt`, diff --git a/docker/Dockerfile.prod b/docker/Dockerfile.prod index 4bf41c621..ed1b923df 100644 --- a/docker/Dockerfile.prod +++ b/docker/Dockerfile.prod @@ -185,6 +185,27 @@ COPY --from=builder --chown=www-data:www-data /build/web/ /var/www/html/web/ # successful `SELECT 1`, 503 with a one-line stderr log otherwise. COPY --chown=www-data:www-data web/health.php /var/www/html/web/health.php +# Ship the licence + attribution files inside the runtime image so an +# operator who `docker exec`s in can satisfy the ELv2 "Notices" +# obligation without having to fetch them out of band. The image +# itself only carries the web panel (the SourceMod plugins ship +# separately as the .plugin-only tarball — they're not bundled into +# the panel's runtime image because the panel's docker is the web +# server, not the gameserver), but we ship LICENSE-plugins.txt +# alongside as a reference for self-hosters whose docker host is +# also their gameserver host. +# +# Stable docroot-adjacent path at /var/www/html/. The Apache +# DocumentRoot is /var/www/html/web/ (one level deeper), so these +# files sit OUTSIDE the docroot and Apache cannot serve them at +# any HTTP URL regardless of the request shape — no deny rule +# needed in docker/apache/sbpp-prod.conf. Operator access is via +# `docker cp :/var/www/html/LICENSE.txt .` or +# `docker exec cat /var/www/html/LICENSE.txt`. +COPY --chown=root:root LICENSE.txt /var/www/html/LICENSE.txt +COPY --chown=root:root LICENSE-plugins.txt /var/www/html/LICENSE-plugins.txt +COPY --chown=root:root THIRD-PARTY-NOTICES.txt /var/www/html/THIRD-PARTY-NOTICES.txt + # Pre-create the writable directories the runtime needs. cache/ + # templates_c/ are Smarty + sessions; demos/ is the only must-persist # user-data dir (uploaded ban-evidence demos). The compose file binds @@ -259,7 +280,7 @@ LABEL org.opencontainers.image.title="SourceBans++" \ org.opencontainers.image.url="https://sbpp.github.io" \ org.opencontainers.image.source="https://github.com/sbpp/sourcebans-pp" \ org.opencontainers.image.documentation="https://sbpp.github.io/getting-started/quickstart-docker/" \ - org.opencontainers.image.licenses="CC-BY-NC-SA-3.0 AND GPL-3.0-or-later" \ + org.opencontainers.image.licenses="Elastic-2.0" \ org.opencontainers.image.vendor="SourceBans++ Dev Team" WORKDIR /var/www/html/web diff --git a/docs/src/content/docs/faq/index.md b/docs/src/content/docs/faq/index.md index d83b66af6..2a0331788 100644 --- a/docs/src/content/docs/faq/index.md +++ b/docs/src/content/docs/faq/index.md @@ -13,18 +13,34 @@ topic. If yours isn't here, drop into our ### What is SourceBans++? -A free, open-source admin and ban-management system for Source-engine -game servers. It has a web panel your admins log into and a set of -SourceMod plugins running on each of your game servers. They share a -database and coordinate through it. +A source-available admin and ban-management system for Source-engine +game servers, free for community use. It has a web panel your admins +log into and a set of SourceMod plugins running on each of your game +servers. They share a database and coordinate through it. The [Overview](/getting-started/overview/) has the longer answer. ### Is it free? -Yes. SourceBans++ is open source under CC BY-NC-SA 3.0 for the web -panel and GPLv3 for the plugins. We don't sell hosting, support, or -plugins. +Yes — for everyone except game-server hosting companies who want to +offer the panel to their customers as a hosted, managed service. + +The web panel is distributed under the +[Elastic License 2.0](https://www.elastic.co/licensing/elastic-license); +the SourceMod plugins are under +[GPLv3](https://www.gnu.org/licenses/gpl-3.0.html). Hobby use, +community use, running it for your own clan / network, bundling it +into a Docker image, publishing a Pterodactyl egg, packaging it for +a distro — all of that stays free under ELv2's terms. What ELv2 +reserves is the right to provide the panel as a hosted or managed +service to third parties; if that's your business model, the +project offers a separate commercial license. Open a thread in the +[Commercial licensing discussion category](https://github.com/sbpp/sourcebans-pp/discussions/categories/commercial-licensing) +or DM [@rumblefrog](https://github.com/rumblefrog) on the +[Discord](https://discord.gg/tzqYqmAtF5) — see the +[sponsor page](/sponsor/) for the longer breakdown. + +We don't sell hosting, support, or plugins ourselves. ### Where can I get help? diff --git a/docs/src/content/docs/getting-started/quickstart.mdx b/docs/src/content/docs/getting-started/quickstart.mdx index a5367f633..9aba3bf1d 100644 --- a/docs/src/content/docs/getting-started/quickstart.mdx +++ b/docs/src/content/docs/getting-started/quickstart.mdx @@ -136,9 +136,21 @@ Open `https:///install/` in a browser (or `https:///sb/install/` if you uploaded into a subfolder). The wizard has five steps; we'll cover each. -### Licence - -Read it, tick **I have read, and accept the licence**, click **OK**. +### License + +The web panel is distributed under the +[Elastic License 2.0](https://www.elastic.co/licensing/elastic-license); +the bundled SourceMod plugins are under +[GPLv3](https://www.gnu.org/licenses/gpl-3.0.html). Hobby / community +self-hosting (the typical case for an admin reading this page) is +free under both. If you're a game-server hosting provider planning +to offer SourceBans++ to your customers as a hosted or managed +service, see [the FAQ "Is it free?" entry](/faq/#is-it-free) +**before** continuing — that use case is reserved by ELv2 and a +separate commercial licence is needed. + +Read the summary the wizard surfaces, tick **I have read and accept +the license above.**, click **Continue**. ### Database details diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx index 25ee79100..c5c0e9a94 100644 --- a/docs/src/content/docs/index.mdx +++ b/docs/src/content/docs/index.mdx @@ -21,9 +21,10 @@ hero: import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components'; -SourceBans++ is a free, open-source admin and ban-management system +SourceBans++ is a source-available admin and ban-management system for Source-engine games (Team Fortress 2, Counter-Strike, Garry's Mod, -and friends). It has two halves that talk to each other: +and friends), free for community use. It has two halves that talk to +each other: - A **web panel** your admins use to manage bans, mutes, server access, and admin permissions. diff --git a/docs/src/content/docs/sponsor.mdx b/docs/src/content/docs/sponsor.mdx index cb6c79efc..da1888c21 100644 --- a/docs/src/content/docs/sponsor.mdx +++ b/docs/src/content/docs/sponsor.mdx @@ -6,7 +6,8 @@ template: splash import Sponsors from '../../components/Sponsors.astro'; -SourceBans++ is free, open source, and built on volunteer time. The +SourceBans++ is free for community use, source-available, and built +on volunteer time. The panel and the SourceMod plugins are maintained by a small group of contributors led by [rumblefrog](https://github.com/rumblefrog), with patches from community admins running the project on their own @@ -55,8 +56,21 @@ Money is one way; there are others. The project always welcomes: there is. :::note -**Game-server hosts and SourceBans++-as-a-feature providers**: -production / commercial use of the web panel is covered by a -separate commercial license. Reach out via the contact link on -the platform of your choice above or via Discord. +**Game-server hosts and SourceBans++-as-a-feature providers**: the +web panel is distributed under the +[Elastic License 2.0](https://www.elastic.co/licensing/elastic-license), +which reserves the right to offer the panel as a hosted or managed +service to third parties. If that's your business model — for +example, surfacing SourceBans++ to your customers as a one-click +add-on, white-labelling it inside a control panel, or running it +on their behalf as part of a managed-game-server product — a +separate commercial license is available. + +Open a thread in the +[Commercial licensing discussion category](https://github.com/sbpp/sourcebans-pp/discussions/categories/commercial-licensing) +to start the conversation publicly, or DM +[@rumblefrog](https://github.com/rumblefrog) on the SourceBans++ +[Discord](https://discord.gg/tzqYqmAtF5) for a private +introduction. A dedicated inbox is on the roadmap once commercial +inquiry volume warrants the dedicated address. ::: diff --git a/docs/src/content/docs/updating/1-8-to-2-0.mdx b/docs/src/content/docs/updating/1-8-to-2-0.mdx index d771bef51..321ee5d2f 100644 --- a/docs/src/content/docs/updating/1-8-to-2-0.mdx +++ b/docs/src/content/docs/updating/1-8-to-2-0.mdx @@ -13,7 +13,7 @@ changes between 1.8.x and 2.0.x and the prep work an admin should do (back up, upload, visit `/updater/`) is the same as any other version. See [Updating SourceBans++](/updating/) for that. -The four things to know about the v2.0 upgrade: +The five things to know about the v2.0 upgrade: 1. The **PHP version floor moves up** to 8.5. Check your host first. 2. The **active theme resets** to default. Custom themes need @@ -21,6 +21,12 @@ The four things to know about the v2.0 upgrade: 3. **Anonymous telemetry ships on by default.** Opt-out is one click. 4. A **daily project-announcements feed** also ships on by default for logged-in admins. Opt-out is a one-line `config.php` define. +5. The **web panel licence has changed** from CC BY-NC-SA 3.0 to the + Elastic License 2.0. Hobby and community use stays free; offering + the panel as a hosted or managed service to third parties (the + classic game-server hosting "panel-as-a-feature" upsell) now + requires a separate commercial licence. SourceMod plugins remain + GPLv3. See [Licence change](#licence-change) below.