Warning, /pim/sink/docs/designgoals.md is written in an unsupported language. File is not indexed.

0001 # Design Goals
0002 ## Axioms
0003 1. Personal information is stored in multiple sources (address books, email stores, calendar files, ...)
0004 2. These sources may local, remote or a mix of local and remote
0005 
0006 ## Requirements
0007 1. Local mirrors of these sources must be available to 1..N local clients simultaneously
0008 2. Local clients must be able to make (or at least request) changes to the data in the local mirrors
0009 3. Local mirrors must be usable without network, even if the source is remote
0010 4. Local mirrors must be able to syncronoize local changes to their sources (local or remote)
0011 5. Local mirrors must be able to syncronize remote changes and propagate those to local clients
0012 6. Content must be searchable by a number of terms (dates, identities, body text ...)
0013 7. This must all run with acceptable performance on a moderate consumer-grade desktop system
0014 
0015 Nice to haves:
0016 
0017 1. As-close-to-zero-copy-as-possible for data
0018 2. Simple change notification semantics
0019 3. Resource-specific syncronization techniques
0020 4. Data agnostic storage
0021 
0022 Immediate goals:
0023 
0024 1. Ease development of new features in existing resources
0025 2. Ease maintenance of existing resources
0026 3. Make adding new resources easy
0027 4. Make adding new types of data or data relations easy
0028 5. Improve performance relative to existing Akonadi implementation
0029 
0030 Long-term goals:
0031 
0032 1. Project view: given a query, show all items in all stores that match that query easily and quickly
0033 
0034 Implications of the above:
0035 
0036 * Local mirrors must support multi-reader, but are probably best served with single-writer semantics as this simplifies both local change recording as well as remote synchronization by keeping it in one process which can process write requests (local or remote) in sequential fashion.
0037 * There is no requirement for a central server if the readers can concurrently access the local mirror directly
0038 * A storage system which requires a schema (e.g. relational databases) are a poor fit given the desire for data agnosticism and low memory copying
0039