|
| 1 | +# Annexe I: Project plan Manas |
| 2 | + |
| 3 | +Manas project aims to make Solid ubiquitous by creating an ecosystem |
| 4 | +with well-tested, standards compliant, reusable components in rust and |
| 5 | +js, with which one can assemble customized, feature rich Solid storage |
| 6 | +servers, clients, and applications, and digital-commons with |
| 7 | +data-sovereignty, collaboration, interoperability at the core. |
| 8 | + |
| 9 | +Till now, the project has already handcrafted the required macro |
| 10 | +architecture to enable the stated goals. The architecture is documented |
| 11 | +in detail at the Manas architecture document |
| 12 | +(https://manomayam.github.io/manas/architecture.html). Along with that, |
| 13 | +many of the essential components to assemble custom servers were also |
| 14 | +delivered. They include but not limited to authentication with |
| 15 | +Solid-OIDC, access control with WAC, ACP, repository implementations |
| 16 | +backed by fs, major cloud object stores, Solid compliant storage |
| 17 | +service, interfaces for pod management, repo layers to add custom |
| 18 | +validation, content-negotiation, patching, etc. Few general crates to |
| 19 | +help in rdf& solid-ecosystem are also published. Few pre assembled |
| 20 | +server recipes also were shipped. |
| 21 | + |
| 22 | +With that work as a solid foundation, the next phase of the project aims |
| 23 | +to solidify, and deliver the remaining ecosystem to achieve stated |
| 24 | +goals. The tasks for this stage can be broadly classified into following |
| 25 | +categories: \> Testing + docs, \> Server components, \> Client |
| 26 | +components, \> Application meta components, \> UI components, \> |
| 27 | +Devops + Cloud infra. |
| 28 | + |
| 29 | +## 1. Develop the test suite |
| 30 | + |
| 31 | +Existing codebase already exceeds 75k lines of code. But the test |
| 32 | +coverage is very less. This phase thus creates an extensive, reusable |
| 33 | +test suite to test the abstractions and components. Test suite will be |
| 34 | +classified into two categories: |
| 35 | + |
| 36 | +1. Blackbox tests around each layer of abstractions. These will test |
| 37 | + around the architectural abstractions instead of implementation |
| 38 | + specific invariants. This test suite will be reusable. That way, any |
| 39 | + custom implementations can be tested directly without their custom |
| 40 | + tests again. |
| 41 | +2. Implementation specific invariant testing for shipped components. |
| 42 | + These will test the implementation invariants of the default |
| 43 | + components Manas ships. |
| 44 | + |
| 45 | +This two edged testing can make sure that the modularity of the project |
| 46 | +doesn’t sacrifice correctness and reliability. Also enables reuse of the |
| 47 | +test suite by custom implementations. |
| 48 | + |
| 49 | +### Milestone(s) |
| 50 | + |
| 51 | +1. Blackbox testsuite for Repo abstraction, implementation invariant |
| 52 | + tests for OpendalRepo, testing detailed invariants of object store |
| 53 | + layout against fs, s3, gcs, backends |
| 54 | +2. Tests for provided repo layers |
| 55 | +3. Blackbox testsuite for SolidStorageService abstraction, |
| 56 | + implementation invariant testing for the default implementation, |
| 57 | + including resource layout, concurrency, ACID semantics, etc. |
| 58 | +4. Test suite for WAC, ACP access control systems. |
| 59 | +5. Test suite for Solid-OIDC resource-server component |
| 60 | +6. Integrate solid-contrib’s conformance-test-harness, |
| 61 | + web-access-control-tests, solid-crud-tests into CI/CD. |
| 62 | + |
| 63 | + |
| 64 | +## 2. Create high level documentation |
| 65 | + |
| 66 | +Though API is highly documented, and code is well commented, there is a |
| 67 | +lack of high level documentation for both end users and custom |
| 68 | +implementors. This task will address the concern. |
| 69 | + |
| 70 | +### Milestone(s) |
| 71 | + |
| 72 | +1. High level documentation for end users |
| 73 | +2. High level documentation for custom implementors and integrators. |
| 74 | +3. Create a logo for the project |
| 75 | + |
| 76 | +## 3. Modules for podverse management |
| 77 | + |
| 78 | +Currently, interfaces and architecture for managing multi-pod podsets, |
| 79 | +including provisioning, routing, etc are already created. But concrete |
| 80 | +components are yet to follow for dynamic podsets. |
| 81 | + |
| 82 | +### Milestone(s) |
| 83 | + |
| 84 | +1. Evolve an ontology for pod management, with consideration of state |
| 85 | + of the art. |
| 86 | +2. Implement dynamic pod provisioning as a side-effect of creation of a |
| 87 | + provision resource. It will enable managing pods through solid’s |
| 88 | + resource api itself, and allows to reuse existing access control |
| 89 | + mechanism |
| 90 | +3. Create an admin user interface to manage the pods. |
| 91 | + |
| 92 | +## 4. Cloud ops and cloud native modules |
| 93 | + |
| 94 | +This task focuses on making Manas servers easy to integrate into cloud |
| 95 | +stacks with required configurations. |
| 96 | + |
| 97 | +### Milestone(s) |
| 98 | + |
| 99 | +1. Develop containerization and orchestration primitives for Manas |
| 100 | + servers. |
| 101 | +2. Components to allow for Highly-Available configurations. These |
| 102 | + include but not limited to locker implementations backed by |
| 103 | + redis/dynamodb, event store components backed by |
| 104 | + rabbitmq/aws-event-queue, etc. |
| 105 | + |
| 106 | +## 5. Modules for notifications protocol |
| 107 | + |
| 108 | +Solid notifications protocol allows for interoperable notifications on |
| 109 | +the state of solid resources. This task will create required modules for |
| 110 | +both servers and clients to efficiently integrate notifications |
| 111 | +functionality. |
| 112 | + |
| 113 | +### Milestone(s) |
| 114 | + |
| 115 | +1. Create a shared crate modeling the world of notifications protocol. |
| 116 | + |
| 117 | +2. Create a pluggable notifying-repo-layer. This will allow any custom |
| 118 | + server to layer notification seeding functionality over their chosen |
| 119 | + repo implementation. |
| 120 | +3. Implement webhook-channel-2023 module for server and clients. |
| 121 | +4. Implement websocket-channel-2023, eventsource-channel-2023 modules |
| 122 | + for server and clients. |
| 123 | + |
| 124 | +## 6. Specify and implement WebId-SASL authentication scheme |
| 125 | + |
| 126 | +Solid-OIDC is convenient for delegated access by third parties. But is |
| 127 | +not suitable for one-to-one authentication with pods. Thus creation of |
| 128 | +server side bots etc. is not handled properly in the current ecosystem. |
| 129 | +By integrating into SASL ecosytem, we can provide a pluggable |
| 130 | +architecture for WebId authentication. This task aims to specify |
| 131 | +WebId-SASL, and provide a reusable module to integrate as an auth |
| 132 | +scheme. It will also require collaboration with CG (In which the author |
| 133 | +is a long time participant). |
| 134 | + |
| 135 | +### Milestone(s) |
| 136 | + |
| 137 | +1. Specify WebId-SASL. |
| 138 | +2. Create a server module to integrate WebId-SASL auth scheme. |
| 139 | +3. Implement SASL mechanisms specified by \<RFC3163: ISO/IEC 9798-3 |
| 140 | + Authentication SASL Mechanism\> as exemplary WebId-SASL mechanisms |
| 141 | + |
| 142 | + |
| 143 | +## 7. Auxiliary service modules for server |
| 144 | + |
| 145 | +This task involves creating a few auxiliary service modules, that enable |
| 146 | +serious usage of data in solid pods in many important domains. |
| 147 | + |
| 148 | +### Milestone(s) |
| 149 | + |
| 150 | +1. Implement an indexing module. It will index the linked data in a pod |
| 151 | + according to user specified configuration. Also provide index |
| 152 | + interface through quad-pattern-fragments, triple-pattern-fragments, |
| 153 | + and sparql. |
| 154 | +2. Create iiif-image and iiif-av module. Allows for efficient |
| 155 | + consumption of multimedia stored in pods through industry standard |
| 156 | + apis. Highly useful for galleries/libraries/archives/museums. |
| 157 | +3. Module for Memento compatible resource versioning and history. |
| 158 | + |
| 159 | +## 8. Client modules |
| 160 | + |
| 161 | +This task creates essential modules for rust clients against Solid |
| 162 | +servers. |
| 163 | + |
| 164 | +### Milestone(s) |
| 165 | + |
| 166 | +1. Authentication client with solid-oidc, WebId-SASL support. |
| 167 | +2. High level client to easily deal with data in pods, notifications, |
| 168 | + access control, etc. |
| 169 | +3. Provide python, js, wasm bindings to above clients. |
| 170 | + |
| 171 | +## 9. Native application modules |
| 172 | + |
| 173 | +For the applications, a reusable crate will be created to package them |
| 174 | +as native applications using Tauri, and Manas. This could make Solid an |
| 175 | +attractive storage API to code web & native apps with a single code |
| 176 | +base. Already a POC solution was created at Solvent project, that |
| 177 | +demonstrates the capabilities of this combination. |
| 178 | + |
| 179 | +### Milestone(s) |
| 180 | + |
| 181 | +1. Crate to package solid web apps as native apps against the user’s |
| 182 | + filesystem. |
| 183 | +2. Add support for native first applications, that can work on fs, and |
| 184 | + sync back to solid pods. |
| 185 | + |
| 186 | +## 10. UI components |
| 187 | + |
| 188 | +Linked data ecosystem currently lacks even fundamental pieces of |
| 189 | +reusable, end-user friendly, accessible, localizable UI components for |
| 190 | +basic needs. This creates a formidable barrier in linked data adoption. |
| 191 | +This broad task is thus focused on creating those fundamental |
| 192 | +components. |
| 193 | + |
| 194 | +To enable reusability, components will be coded as standard web |
| 195 | +components, that can be used with any framework, or vanilla html. |
| 196 | + |
| 197 | +To ensure accessibility, and themability, they will be coded on top of |
| 198 | +Shoeace web components. |
| 199 | + |
| 200 | +To ensure their fitness for various use case scenarios, they will be |
| 201 | +coded as loosely coupled, configurable components. |
| 202 | + |
| 203 | +### Milestone(s) |
| 204 | + |
| 205 | +1. Component for user authentication with their WebId |
| 206 | +2. Component for ontology+data driven RDF authoring. This aims to |
| 207 | + provide a fluid experience, by making authoring of linked data |
| 208 | + statements as simple as authoring natural language statements. |
| 209 | +3. Component for visualizing, navigating, searching RDF graphs. |
| 210 | +4. Component for access control management. |
| 211 | +5. Component for RDF data gleaning. |
| 212 | + |
| 213 | +## 11. Integrate rauthy identity provider |
| 214 | + |
| 215 | +Rauthy (https://github.com/sebadob/rauthy) is an identity provider |
| 216 | +written in rust. This author had worked with the project to add support |
| 217 | +for Solid-OIDC to the idp component. This task aims to further make |
| 218 | +rauthy pluggable, and create an integrated server that serves both idp, |
| 219 | +and solid pods. This will enable quick dev setups for application |
| 220 | +developers, and also personal pod+idp hosting. |
| 221 | + |
| 222 | +### Milestone(s) |
| 223 | + |
| 224 | +1. Make rauthy pluggable, and create a server component to easily |
| 225 | + integrate the idp. |
| 226 | + |
| 227 | +## 12. Processing feedback from Accessibility and Security audits |
| 228 | + |
| 229 | +Project involves developing ui components, and secure Authn/z systems, |
| 230 | +apis etc.Hence audits are greatly appreciated, and processing their |
| 231 | +feedback will be this task's aim. |
| 232 | + |
| 233 | +### Milestone(s) |
| 234 | + |
| 235 | +1. Release with feedback processed |
| 236 | + |
| 237 | +[1] NGI Zero Entrust was established with financial support from the |
| 238 | +European Commission's Next Generation Internet programme, under the |
| 239 | +aegis of DG Communications Networks, Content and Technology. |
| 240 | + |
| 241 | +[2] IEEE Code of Ethics, see: https://www.ieee.org/about/ethics |
0 commit comments