Skip to content

Commit c91e9d9

Browse files
committed
feat: add project plan
1 parent e80840b commit c91e9d9

File tree

1 file changed

+241
-0
lines changed

1 file changed

+241
-0
lines changed

PROJECT_PLAN.md

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
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

Comments
 (0)