Design Philosophy

sanity edited this page Apr 11, 2011 · 4 revisions

"Needs" driven development

Tahrir's focus on providing twitter-like functionality, with relatively small messages that are not particularly latency-sensitive, affords quite a bit of flexibility that is not available to architectures like Tor, Freenet, and I2P. The philosophy of Tahrir's development is that, while Tahrir should retain the capability to implement powerful features in the future, the initial feature-set should be driven by the most immediate needs of people living under Internet censorship.

There is a tendency in projects like this one to focus more on interesting problems than the actual problems people face on the ground. We hope to avoid falling into that trap with Tahrir by allowing our development process to be driven by those on the "front lines" of the fight for freedom of speech in countries like China.

Smart defaults over configurability

In terms of the architecture of our source code, we must recognize that our high-level goals are very ambitious. Consequently, it is important that the low-level building blocks be as easy to use as possible.

For this reason, rather than complicating our low-level code with unnecessary flexibility, our preference is to commit to smart design decisions at each level. This is similar to the philosophy of "convention over configuration", popularized by the Ruby on Rails framework.

So, for example, rather than retaining the ability to plug-in various different cryptography algorithms, we pick the best-of-breed algorithms and stick to them. In our case this is 256 bit AES for symmetric crypto, 2048 bit RSA for asymmetric, and SHA256 for hashing.

Similarly, our serialization architecture is designed to work with simple Java POJOs, inspired by the Google GSON library.