|
| 1 | +// SPDX-License-Identifier: CC-BY-SA-4.0 |
| 2 | +// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> |
| 3 | += Keepable Software Strand |
| 4 | +:toc: |
| 5 | +:sectnums: |
| 6 | + |
| 7 | +== Status |
| 8 | + |
| 9 | +CCCP thematic strand: proposed / experimental |
| 10 | + |
| 11 | +== Summary |
| 12 | + |
| 13 | +The Keepable Software Strand names a CCCP design commitment: |
| 14 | + |
| 15 | +[quote] |
| 16 | +____ |
| 17 | +Software should remain runnable, inspectable, forkable, exportable, and meaningfully ownable by the person who downloads it. |
| 18 | +____ |
| 19 | + |
| 20 | +This strand covers projects that are web-accessible but not web-captive. |
| 21 | + |
| 22 | +A Keepable Software project may use a browser interface, optional sync, hosted builds, update services, or companion infrastructure. However, the user's ability to run a meaningful version of the software must not depend entirely on a continuing subscription, remote execution service, central vendor, proprietary runtime, or disappearing platform. |
| 23 | + |
| 24 | +== Core Intention |
| 25 | + |
| 26 | +Keepable Software is not anti-web. |
| 27 | + |
| 28 | +It is anti-hostageware. |
| 29 | + |
| 30 | +It is not anti-cloud. |
| 31 | + |
| 32 | +It is anti-confiscation-by-architecture. |
| 33 | + |
| 34 | +It is not nostalgia for desktop software. |
| 35 | + |
| 36 | +It is a modern design discipline for software that users can keep. |
| 37 | + |
| 38 | +== Design Commitments |
| 39 | + |
| 40 | +A project following this strand should aim to be: |
| 41 | + |
| 42 | +* local-first where practical; |
| 43 | +* offline-capable where possible; |
| 44 | +* downloadable as a meaningful artefact; |
| 45 | +* inspectable by technically competent users; |
| 46 | +* forkable under a recognised software licence; |
| 47 | +* exportable in relation to user data; |
| 48 | +* runnable without mandatory remote execution for the core experience, unless clearly justified; |
| 49 | +* portable across reasonable platform churn; |
| 50 | +* honest about which parts still depend on external services. |
| 51 | + |
| 52 | +== Web-First, Not Web-Captive |
| 53 | + |
| 54 | +A project may be web-first if the browser is the main user interface. |
| 55 | + |
| 56 | +A project becomes web-captive when the browser is only a window onto somebody else's disappearing machine. |
| 57 | + |
| 58 | +A CCCP-aligned web-first project should therefore prefer: |
| 59 | + |
| 60 | +* client-side execution where practical; |
| 61 | +* WebAssembly for real local engines where appropriate; |
| 62 | +* progressive web application patterns; |
| 63 | +* exportable user data; |
| 64 | +* documented build and recovery paths; |
| 65 | +* minimal dependency on platform-specific stores or accounts. |
| 66 | + |
| 67 | +== Adoption Criteria |
| 68 | + |
| 69 | +A project may claim alignment with the Keepable Software Strand when it can answer these questions clearly: |
| 70 | + |
| 71 | +. Can a user keep a meaningful copy? |
| 72 | +. Can a user run a meaningful version without the original service? |
| 73 | +. Can a user inspect the code or build process? |
| 74 | +. Can a user export their data? |
| 75 | +. Can the project survive a hosting provider, app store, API, or vendor disappearing? |
| 76 | +. Are remaining external dependencies named honestly? |
| 77 | + |
| 78 | +== Non-Goals |
| 79 | + |
| 80 | +This strand does not require every project to be fully offline. |
| 81 | + |
| 82 | +It does not require rejecting all servers, clouds, accounts, APIs, or hosted services. |
| 83 | + |
| 84 | +It does not require pretending that maintenance, security updates, and ecosystem dependencies are free. |
| 85 | + |
| 86 | +It only requires that the project does not deliberately make the user helpless when the service layer changes. |
| 87 | + |
| 88 | +== Reference Example: Nexia-List |
| 89 | + |
| 90 | +Nexia-List is a reference example of this strand. |
| 91 | + |
| 92 | +It is local-first in design and web-first in interface. Its primary target is the browser. Its Rust core is intended to compile to WebAssembly so the real engine can run client-side, with no server required for the essential experience. |
| 93 | + |
| 94 | +A desktop shell may exist as an optional external layer, but the browser remains the primary interface. |
| 95 | + |
| 96 | +The relevant CCCP claim is not that Nexia-List avoids the web. The claim is that it aims to be web-first without being web-captive. |
| 97 | + |
| 98 | +== Badge Text |
| 99 | + |
| 100 | +Suggested badge label: |
| 101 | + |
| 102 | +---- |
| 103 | +CCCP: Keepable Software |
| 104 | +---- |
| 105 | + |
| 106 | +Suggested badge meaning: |
| 107 | + |
| 108 | +---- |
| 109 | +web-first, not web-captive |
| 110 | +---- |
| 111 | + |
| 112 | +== Short Form |
| 113 | + |
| 114 | +Keepable Software means: |
| 115 | + |
| 116 | +[quote] |
| 117 | +____ |
| 118 | +Download it. Keep it. Run it. Inspect it. Fork it. |
| 119 | +Do not make the user's own work disappear behind someone else's switch. |
| 120 | +____ |
0 commit comments