From 48437fe2dd3b81ef57d97b52eed9cbf144de8a0f Mon Sep 17 00:00:00 2001
From: theworker02
Date: Sun, 20 Sep 2026 21:04:07 -0400
Subject: [PATCH 1/2] docs(license): proprietary source-available + commercial
sales path
Replace prior public OSS terms with evaluation-only proprietary LICENSE,
COMMERCIAL.md, and LICENSE_TRANSITION_NOTICE.md for sellable commercial licenses.
Co-authored-by: Cursor
---
COMMERCIAL.md | 35 +++++
LICENSE | 279 ++++++++++-------------------------
LICENSE_TRANSITION_NOTICE.md | 49 ++++++
NOTICE | 8 +
README.md | 65 ++++----
pyproject.toml | 4 +-
6 files changed, 204 insertions(+), 236 deletions(-)
create mode 100644 COMMERCIAL.md
create mode 100644 LICENSE_TRANSITION_NOTICE.md
create mode 100644 NOTICE
diff --git a/COMMERCIAL.md b/COMMERCIAL.md
new file mode 100644
index 0000000..d2809be
--- /dev/null
+++ b/COMMERCIAL.md
@@ -0,0 +1,35 @@
+# Commercial licensing — botscope
+
+botscope is **source-available proprietary software**, not open source.
+
+- **Evaluation:** You may view, clone, and try botscope for non-production evaluation under [`LICENSE`](./LICENSE).
+- **Everything else:** Production use, redistribution, SaaS/hosted offerings, CI gates for shipping products, and other commercial use require a **paid commercial license**.
+
+This file describes how to inquire about a commercial license. It is **not** legal advice and is **not** itself a binding quote or purchase agreement.
+
+## What a commercial license typically covers
+
+Commercial terms are negotiated case-by-case. Topics often include:
+
+- Production and internal business use
+- Redistribution / OEM embedding (if needed)
+- Hosted / SaaS / multi-tenant use
+- Support or update expectations (if offered)
+- Seat, org, or deployment scope
+
+## How to buy / inquire
+
+1. Open a private channel with GitHub **[@theworker02](https://github.com/theworker02)** (preferred).
+2. Reference **botscope** and whether you need: production use, redistribution, SaaS, or acquisition / partnership.
+3. Include approximate company size, use case, and timeline.
+
+Optional: open a GitHub Discussion or Issue titled `Commercial license inquiry` with non-sensitive details only — do not paste secrets.
+
+## License transition & enforcement
+
+Read [`LICENSE_TRANSITION_NOTICE.md`](./LICENSE_TRANSITION_NOTICE.md) for the diligence-ready letter on historical open-source copies versus current proprietary terms, and enforcement by the copyright holder and/or any acquirer/successor.
+
+## Contact
+
+**Primary:** GitHub [@theworker02](https://github.com/theworker02)
+**Repository:** https://github.com/theworker02/botscope
diff --git a/LICENSE b/LICENSE
index 3138dfa..2ac2358 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,201 +1,78 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2026 BotScope Contributors
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+botscope Source-Available Evaluation License
+Copyright (c) 2026 theworker02 (https://github.com/theworker02)
+
+IMPORTANT: This is NOT an open-source license. The Software is proprietary
+source-available software. Viewing the source does not grant production,
+redistribution, SaaS, or other commercial rights.
+
+1. Definitions
+
+ "Software" means botscope and all associated source code, binaries,
+ documentation, and other materials in this repository, excluding
+ third-party components that carry their own licenses.
+
+ "Licensor" means theworker02 (GitHub: https://github.com/theworker02).
+
+ "Evaluation Use" means non-production use solely to review, evaluate,
+ test, or demonstrate the Software for your own internal assessment,
+ including local clones and personal experimentation that is not part of
+ a live product, paid service, or customer-facing system.
+
+2. Evaluation grant
+
+ Subject to these terms, Licensor grants you a limited, revocable,
+ non-exclusive, non-transferable, non-sublicensable license to view,
+ clone, and use the Software for Evaluation Use only.
+
+3. Restrictions (commercial license required)
+
+ Except as expressly permitted above, or under a separate written
+ commercial license from Licensor, you may NOT:
+
+ (a) use the Software in production, staging that serves real users or
+ customers, CI/CD gates for shipping products, or any live workload;
+ (b) redistribute, sell, lease, sublicense, or otherwise transfer the
+ Software or derivative works to third parties;
+ (c) offer the Software (or substantially similar functionality) as a
+ hosted, managed, SaaS, or multi-tenant service;
+ (d) use the Software for any commercial purpose, including internal
+ business use beyond Evaluation Use;
+ (e) remove or alter copyright, license, or attribution notices.
+
+4. Commercial licenses
+
+ Production use, redistribution, SaaS, and other commercial use require
+ a paid commercial license. See COMMERCIAL.md or contact Licensor via
+ GitHub @theworker02. This document is not legal advice and does not
+ create a purchase obligation; commercial terms are set in a separate
+ written agreement.
+
+5. Contributions
+
+ By submitting a contribution (pull request, patch, or similar) you
+ assign to Licensor, or irrevocably license to Licensor under terms
+ sufficient for Licensor to relicense and commercialize, all rights in
+ that contribution. Do not contribute code you cannot license this way.
+
+6. Ownership
+
+ The Software is and remains the exclusive property of Licensor.
+ No title or ownership is transferred. Third-party dependencies remain
+ under their respective licenses.
+
+7. No warranty
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE SOFTWARE OR ITS USE.
+
+8. Termination
+
+ This license terminates automatically if you breach these terms.
+ Upon termination you must cease all use and destroy copies obtained
+ under this license, except as required by a separate commercial
+ agreement or applicable law.
+
+For commercial licensing, see COMMERCIAL.md.
diff --git a/LICENSE_TRANSITION_NOTICE.md b/LICENSE_TRANSITION_NOTICE.md
new file mode 100644
index 0000000..134b00d
--- /dev/null
+++ b/LICENSE_TRANSITION_NOTICE.md
@@ -0,0 +1,49 @@
+# License Transition & Enforcement Notice
+
+**Project:** botscope
+**Copyright holder:** theworker02 (https://github.com/theworker02)
+**Effective for current and future distributions of this repository**
+
+This notice is provided for users, evaluators, diligence teams, and prospective licensees or acquirers. It is **not legal advice**.
+
+## Summary
+
+| Period | Terms |
+|--------|--------|
+| **Historical** public distributions that were expressly licensed under Apache License, Version 2.0 (Apache-2.0) | Those copies remain governed by the Apache License, Version 2.0 (Apache-2.0) terms that accompanied them. This notice does **not** claim those prior open-source grants are revoked, and it does **not** claim that continued use of such historical copies under their original Apache License, Version 2.0 (Apache-2.0) terms is illegal. |
+| **Current and future** code in this repository (and builds derived from it after the transition) | **Source-available proprietary** evaluation terms in [`LICENSE`](./LICENSE). Production, redistribution, SaaS, and other commercial use require a paid commercial license — see [`COMMERCIAL.md`](./COMMERCIAL.md). |
+
+## What changed
+
+botscope previously used Apache License, Version 2.0 (Apache-2.0) for public distribution. The project has transitioned to a **source-available proprietary** model so that commercial licenses can be sold and so that intellectual property can be transferred or exclusively licensed in an acquisition or partnership.
+
+- Evaluation / viewing / cloning for non-production assessment: see [`LICENSE`](./LICENSE).
+- Production, redistribution, hosted/SaaS, and other commercial use: require a commercial license — see [`COMMERCIAL.md`](./COMMERCIAL.md).
+
+## Enforcement (post-transition code)
+
+Unauthorized **production**, **redistribution**, **SaaS/hosted**, or other **commercial** use of **post-transition** botscope code (code distributed under the proprietary [`LICENSE`](./LICENSE), not under a separate commercial agreement) may be enforced by:
+
+1. the current copyright holder (**theworker02**), and/or
+2. any **acquirer, assignee, or other successor** that obtains copyright or exclusive licensing rights in botscope.
+
+Enforcement may include (without limitation) requiring a commercial license, seeking injunctive relief, or other remedies available under applicable law. Specific remedies depend on facts, jurisdiction, and the terms of any commercial or acquisition agreement.
+
+## Historical Apache License, Version 2.0 (Apache-2.0) copies (accuracy)
+
+If you lawfully received a prior release or commit that was published under Apache License, Version 2.0 (Apache-2.0), the license that shipped with that material continues to apply **to that historical material**. This transition notice:
+
+- does **not** purport to revoke Apache License, Version 2.0 (Apache-2.0) grants for those historical copies;
+- does **not** recharacterize use of those historical copies under Apache License, Version 2.0 (Apache-2.0) as unlawful solely because of this transition;
+- **does** make clear that **new work** and **current repository contents** are not offered under Apache License, Version 2.0 (Apache-2.0).
+
+Mixing historical open-source trees with current proprietary code does not expand prior open-source rights to post-transition material.
+
+## Acquisition / succession
+
+An acquisition, asset purchase, or exclusive license may assign or transfer copyright and enforcement rights in botscope (including the right to license commercially and to enforce against unauthorized commercial use of post-transition code) to a successor.
+
+## Contact
+
+Commercial licensing or compliance questions: GitHub [@theworker02](https://github.com/theworker02).
+See also [`COMMERCIAL.md`](./COMMERCIAL.md).
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..12426be
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,8 @@
+# NOTICE
+
+botscope
+Copyright 2026 theworker02
+
+Licensing: source-available proprietary evaluation terms — see LICENSE.
+Commercial use requires a separate paid license — see COMMERCIAL.md.
+License transition and enforcement: see LICENSE_TRANSITION_NOTICE.md.
diff --git a/README.md b/README.md
index 50ac465..209b9df 100644
--- a/README.md
+++ b/README.md
@@ -1,23 +1,23 @@
-# BotScope
+# BotScope
**Python-first observability for an Internet-wide census of automated traffic.**
-BotScope is an **Internet-wide bot traffic census**: the Global Observatory federates public crawler/IP panels, crawl catalogs, and optional CDN estimates into a worldwide automation picture — alongside a local analyzer and native Qt desktop Observatory for authorized logs, sessions, and live capture.
+BotScope is an **Internet-wide bot traffic census**: the Global Observatory federates public crawler/IP panels, crawl catalogs, and optional CDN estimates into a worldwide automation picture — alongside a local analyzer and native Qt desktop Observatory for authorized logs, sessions, and live capture.
[](https://github.com/theworker02/botscope/actions/workflows/ci.yml)
[](https://pypi.org/project/botscope/)
[](https://pypi.org/project/botscope/)
[](https://www.python.org/downloads/)
-[](LICENSE)
+[-blue.svg)](LICENSE)
[](https://github.com/theworker02/botscope)
[](docs/GUI.md)
[](https://docs.astral.sh/ruff/)
[](https://github.com/theworker02/botscope/actions/workflows/ci.yml)
[](CHANGELOG.md)
-**Install from PyPI:** [`pip install botscope`](https://pypi.org/project/botscope/) · GUI: [`pip install "botscope[gui]"`](https://pypi.org/project/botscope/)
+**Install from PyPI:** [`pip install botscope`](https://pypi.org/project/botscope/) · GUI: [`pip install "botscope[gui]"`](https://pypi.org/project/botscope/)
> Network contribution is **OFF by default**. BotScope does not perform unauthorized scanning.
> Zero-config for your own logs: **no account**, **no cloud profile**, and **no API key** required to classify local traffic.
@@ -30,18 +30,18 @@ BotScope is an **Internet-wide bot traffic census**: the Global Observatory fede
-*Observatory — KPI cards, composition ring, Traffic Pulse, and category breakdown on the bundled synthetic demo corpus (DEMO DATA banner visible).*
+*Observatory — KPI cards, composition ring, Traffic Pulse, and category breakdown on the bundled synthetic demo corpus (DEMO DATA banner visible).*
| | |
|:--:|:--:|
-| 
*Global — Internet-wide census from zero-auth public sources; Cloudflare Radar optional* | 
*Events — virtualized table, query language, Classification Inspector* |
-| 
*Bot Library — known signatures vs observed-in-dataset markers* | 
*Sources — registry status for public feeds and optional providers* |
+| 
*Global — Internet-wide census from zero-auth public sources; Cloudflare Radar optional* | 
*Events — virtualized table, query language, Classification Inspector* |
+| 
*Bot Library — known signatures vs observed-in-dataset markers* | 
*Sources — registry status for public feeds and optional providers* |
-*Settings — local theme, privacy, and optional Cloudflare Radar token for CDN estimates (field shown empty; no account required).*
+*Settings — local theme, privacy, and optional Cloudflare Radar token for CDN estimates (field shown empty; no account required).*
---
@@ -53,9 +53,9 @@ Animated tour of the main Observatory pages (demo data):
-[Screenshot strip](docs/assets/demo/botscope-tour-strip.png) · [Recording script / MP4 placeholder](docs/assets/demo/README.md)
+[Screenshot strip](docs/assets/demo/botscope-tour-strip.png) · [Recording script / MP4 placeholder](docs/assets/demo/README.md)
-To capture a short screen recording yourself (launch → Demo → KPIs → Global → Events), follow the steps in [`docs/assets/demo/README.md`](docs/assets/demo/README.md) and drop `botscope-demo.mp4` (or `.webm`) beside the GIF.
+To capture a short screen recording yourself (launch → Demo → KPIs → Global → Events), follow the steps in [`docs/assets/demo/README.md`](docs/assets/demo/README.md) and drop `botscope-demo.mp4` (or `.webm`) beside the GIF.
---
@@ -67,16 +67,16 @@ BotScope is an **Internet-wide census of automated traffic**, with a local measu
- Classify requests from combined/common access logs (and optional PCAP / live paths)
- Separate **OBSERVED** totals from **CLASSIFIED** shares, with provenance badges
- Keep an honest **UNKNOWN** outcome instead of forcing certainty
-- Explore both **global census views** and local sessions in a **native desktop Observatory** (Qt / PySide6 — not a website)
+- Explore both **global census views** and local sessions in a **native desktop Observatory** (Qt / PySide6 — not a website)
## What BotScope is not
-- **Not** limited to a single site or sensor — Global Observatory is the Internet-wide census surface
+- **Not** limited to a single site or sensor — Global Observatory is the Internet-wide census surface
- **Not** a claim that one local log alone equals the whole Internet (local shares stay labeled local; the census comes from federated global sources)
-- **Not** a cloud SaaS — analysis and preferences stay on your machine by default
+- **Not** a cloud SaaS — analysis and preferences stay on your machine by default
- **Not** a substitute for authorization: only analyze systems and traffic you own or have permission to measure
-The product’s primary global story is the **Internet-wide census**. Local Observatory KPIs remain dataset-scoped so you can compare your sensors against that census without conflating the two.
+The product’s primary global story is the **Internet-wide census**. Local Observatory KPIs remain dataset-scoped so you can compare your sensors against that census without conflating the two.
---
@@ -92,7 +92,7 @@ The product’s primary global story is the **Internet-wide census**. Local Obse
| **Dataset Health** | Multi-dimension quality scorecard for the loaded session |
| **Events** | Virtualized event browser, quick search, shared safe query language |
| **Compare** | Session-to-session deltas and classifier-vs-labels panels (no causal claims) |
-| **Provenance** | OBSERVED vs CLASSIFIED vs INFERRED — numbers keep their lineage |
+| **Provenance** | OBSERVED vs CLASSIFIED vs INFERRED — numbers keep their lineage |
| **Exports** | Multi-format reports (Markdown, HTML, JSON, CSV) and research export helpers |
| **Live capture** | Authorized log-tail and optional local-interface sniff; measured rates only |
| **CLI + Python API** | Headless analyze / query / report / doctor alongside the GUI |
@@ -161,7 +161,7 @@ print(result.automation_fraction)
print(result.stats.by_category)
```
-More detail: [`docs/guides/QUICKSTART.md`](docs/guides/QUICKSTART.md) · [`docs/guides/INSTALLATION.md`](docs/guides/INSTALLATION.md)
+More detail: [`docs/guides/QUICKSTART.md`](docs/guides/QUICKSTART.md) · [`docs/guides/INSTALLATION.md`](docs/guides/INSTALLATION.md)
---
@@ -194,27 +194,27 @@ Run `botscope --help` or `botscope --help` for options. Tutorials live
```
Access log / PCAP / live sensor
- │
- ▼
+ │
+ â–¼
Ingest + privacy transforms
- │
- ▼
+ │
+ â–¼
Classify (rules, identity, optional ML)
- │
- ├──► .bscope session store (events, aggregates, workspace)
- ├──► CLI reports / export / research packs
- └──► Observatory GUI (KPIs, Events, Global census, Live, …)
- │
- └──► Global federation → Internet-wide census
+ │
+ ├──► .bscope session store (events, aggregates, workspace)
+ ├──► CLI reports / export / research packs
+ └──► Observatory GUI (KPIs, Events, Global census, Live, …)
+ │
+ └──► Global federation → Internet-wide census
(zero-auth public sources; Cloudflare Radar if you supply a token)
```
-- **Internet-wide census**: Global Observatory is the census product — federated public panels and optional CDN estimates.
+- **Internet-wide census**: Global Observatory is the census product — federated public panels and optional CDN estimates.
- **Local-first**: sessions and preferences stay on disk unless you explicitly enable network contribution.
- **Provenance-aware**: OBSERVED counts are never relabeled as CLASSIFIED shares; local KPIs stay distinct from the global census.
-- Methodology notes: [`docs/research/METHODOLOGY.md`](docs/research/METHODOLOGY.md) · [`docs/research/GLOBAL_ESTIMATION.md`](docs/research/GLOBAL_ESTIMATION.md).
+- Methodology notes: [`docs/research/METHODOLOGY.md`](docs/research/METHODOLOGY.md) · [`docs/research/GLOBAL_ESTIMATION.md`](docs/research/GLOBAL_ESTIMATION.md).
-Deeper maps: [`docs/architecture/REPOSITORY_MAP.md`](docs/architecture/REPOSITORY_MAP.md) · diagrams in [`docs/architecture/diagrams/`](docs/architecture/diagrams/) · GUI guide [`docs/GUI.md`](docs/GUI.md)
+Deeper maps: [`docs/architecture/REPOSITORY_MAP.md`](docs/architecture/REPOSITORY_MAP.md) · diagrams in [`docs/architecture/diagrams/`](docs/architecture/diagrams/) · GUI guide [`docs/GUI.md`](docs/GUI.md)
---
@@ -229,7 +229,7 @@ Deeper maps: [`docs/architecture/REPOSITORY_MAP.md`](docs/architecture/REPOSITOR
| [`docs/QUERY.md`](docs/QUERY.md) | Safe query language (CLI + GUI + Python) |
| [`docs/CAPTURE.md`](docs/CAPTURE.md) | Authorized capture notes |
| [`docs/PRIVACY.md`](docs/PRIVACY.md) | Privacy transforms and boundaries |
-| [`docs/GLOSSARY.md`](docs/GLOSSARY.md) | Terms (OBSERVED, CLASSIFIED, …) |
+| [`docs/GLOSSARY.md`](docs/GLOSSARY.md) | Terms (OBSERVED, CLASSIFIED, …) |
| [`docs/research/METHODOLOGY.md`](docs/research/METHODOLOGY.md) | Measurement methodology |
| [`docs/research/LIMITATIONS.md`](docs/research/LIMITATIONS.md) | What BotScope will not claim |
| [`docs/sources/SOURCE_RESEARCH.md`](docs/sources/SOURCE_RESEARCH.md) | Public source inventory |
@@ -265,7 +265,7 @@ Cloudflare Radar is **optional**. Leave Settings blank for normal local-log work
1. Treat **Global Observatory as an Internet-wide census**, built from federated sources with provenance
2. Prefer **UNKNOWN** over forced certainty
-3. Separate **OBSERVED** counts from **CLASSIFIED** shares — and local KPIs from the global census
+3. Separate **OBSERVED** counts from **CLASSIFIED** shares — and local KPIs from the global census
4. Privacy transforms and local-first storage by default
5. Network contribution remains **OFF** unless explicitly enabled
@@ -288,6 +288,5 @@ ruff check src tests scripts
## License
-Apache License 2.0 — see [`LICENSE`](LICENSE).
+**Source-available proprietary** — evaluation under [LICENSE](./LICENSE); commercial / production use via [COMMERCIAL.md](./COMMERCIAL.md). See [LICENSE_TRANSITION_NOTICE.md](./LICENSE_TRANSITION_NOTICE.md) and [NOTICE](./NOTICE).
-Citation helpers: `botscope citation` and [`CITATION.cff`](CITATION.cff).
diff --git a/pyproject.toml b/pyproject.toml
index 2d534d9..a1182f3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,4 +1,4 @@
-[build-system]
+[build-system]
requires = ["hatchling>=1.25"]
build-backend = "hatchling.build"
@@ -7,7 +7,7 @@ name = "botscope"
version = "2.0.0"
description = "Internet-wide bot traffic census with a local measurement workstation and native Qt Observatory."
readme = "README.md"
-license = "Apache-2.0"
+license = "Proprietary"
requires-python = ">=3.10"
authors = [
{ name = "BotScope Contributors" },
From cd9f397931f73b72409b4c57bc16b331aef76e8b Mon Sep 17 00:00:00 2001
From: theworker02
Date: Sun, 20 Sep 2026 21:38:49 -0400
Subject: [PATCH 2/2] fix(license): strip UTF-8 BOM so CI can parse
pyproject.toml
BOM at the start of pyproject.toml caused tomllib TOMLDecodeError and
failed all required lint+pytest jobs. Also point license metadata at
LICENSE and update the PyPI classifier for proprietary terms.
Co-authored-by: Cursor
---
COMMERCIAL.md | 2 +-
LICENSE | 2 +-
LICENSE_TRANSITION_NOTICE.md | 2 +-
NOTICE | 2 +-
README.md | 2 +-
pyproject.toml | 6 +++---
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/COMMERCIAL.md b/COMMERCIAL.md
index d2809be..73f0828 100644
--- a/COMMERCIAL.md
+++ b/COMMERCIAL.md
@@ -1,4 +1,4 @@
-# Commercial licensing — botscope
+# Commercial licensing — botscope
botscope is **source-available proprietary software**, not open source.
diff --git a/LICENSE b/LICENSE
index 2ac2358..d74d829 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-botscope Source-Available Evaluation License
+botscope Source-Available Evaluation License
Copyright (c) 2026 theworker02 (https://github.com/theworker02)
IMPORTANT: This is NOT an open-source license. The Software is proprietary
diff --git a/LICENSE_TRANSITION_NOTICE.md b/LICENSE_TRANSITION_NOTICE.md
index 134b00d..43d295e 100644
--- a/LICENSE_TRANSITION_NOTICE.md
+++ b/LICENSE_TRANSITION_NOTICE.md
@@ -1,4 +1,4 @@
-# License Transition & Enforcement Notice
+# License Transition & Enforcement Notice
**Project:** botscope
**Copyright holder:** theworker02 (https://github.com/theworker02)
diff --git a/NOTICE b/NOTICE
index 12426be..99d9d5b 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,4 +1,4 @@
-# NOTICE
+# NOTICE
botscope
Copyright 2026 theworker02
diff --git a/README.md b/README.md
index 209b9df..66f36c9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# BotScope
+# BotScope
diff --git a/pyproject.toml b/pyproject.toml
index a1182f3..af6462e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,4 +1,4 @@
-[build-system]
+[build-system]
requires = ["hatchling>=1.25"]
build-backend = "hatchling.build"
@@ -7,7 +7,7 @@ name = "botscope"
version = "2.0.0"
description = "Internet-wide bot traffic census with a local measurement workstation and native Qt Observatory."
readme = "README.md"
-license = "Proprietary"
+license = { file = "LICENSE" }
requires-python = ">=3.10"
authors = [
{ name = "BotScope Contributors" },
@@ -28,7 +28,7 @@ classifiers = [
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Intended Audience :: System Administrators",
- "License :: OSI Approved :: Apache Software License",
+ "License :: Other/Proprietary License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",