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 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. [![CI](https://github.com/theworker02/botscope/actions/workflows/ci.yml/badge.svg)](https://github.com/theworker02/botscope/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/botscope.svg)](https://pypi.org/project/botscope/) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/botscope.svg)](https://pypi.org/project/botscope/) [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue?logo=python&logoColor=white)](https://www.python.org/downloads/) -[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) +[![License](https://img.shields.io/badge/license-Proprietary%20(source--available)-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)](https://github.com/theworker02/botscope) [![Qt / PySide6](https://img.shields.io/badge/GUI-PySide6%20Qt-41CD52?logo=qt&logoColor=white)](docs/GUI.md) [![Code style: Ruff](https://img.shields.io/badge/code%20style-ruff-D7FF64?logo=ruff)](https://docs.astral.sh/ruff/) [![Tests](https://img.shields.io/badge/tests-pytest-0A9EDC?logo=pytest&logoColor=white)](https://github.com/theworker02/botscope/actions/workflows/ci.yml) [![Status](https://img.shields.io/badge/status-v2.0.0%20beta-informational)](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 dashboard with DEMO DATA banner, KPIs, composition ring, and Traffic Pulse

-*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 Observatory Internet-wide census
*Global — Internet-wide census from zero-auth public sources; Cloudflare Radar optional* | Events table with query filter
*Events — virtualized table, query language, Classification Inspector* | -| Bot Library known vs observed
*Bot Library — known signatures vs observed-in-dataset markers* | Sources registry table
*Sources — registry status for public feeds and optional providers* | +| Global Observatory Internet-wide census
*Global — Internet-wide census from zero-auth public sources; Cloudflare Radar optional* | Events table with query filter
*Events — virtualized table, query language, Classification Inspector* | +| Bot Library known vs observed
*Bot Library — known signatures vs observed-in-dataset markers* | Sources registry table
*Sources — registry status for public feeds and optional providers* |

Settings preferences panel

-*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): BotScope GUI tour animated GIF

-[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 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",