Design Principles
A design principle is a test that lets us reject things. Hopefully, when combined with other design principles, it forms a basis for making coherent and consistent decisions about design goals and system features. [1]
Stated design principles
None defined yet, but there seems to be consensus that ngHurd should be a principle-driven design.
Potential design principles
Here is an incomplete list of potential design principles for the ngHurd. It is taken from [2]. I left out some principles I think do not apply or are not in question. Feel free to add more.
Principles from the Multics Project
- Economy of mechanism: Keep the design as simple as possible.
- Fail-safe defaults: Base access decisions on permission rather than exclusion.
- Least priviledge: Components should have no more authority than they require.
- Least common mechanism: Minimize the amount of shared instances in the system.
Commonly accepted principles
- Separation of policy and mechanism
- Least astonishment (also known as principle of least surprise): The system�s behavior should match what is naively expected.
- Complete accountability: All real resources held by an application must come from some accounted pool.
- Safe restart: On restart, the system must either already have, or be able to rapidly establish, a consistent and secure execution state.
- Reproducibility: Correct operations should produce identical results regardless of workload.
Principles specific to EROS
- Credible policy: If a security policy cannot be implemented by correct application of the system�s protection mechanisms, do not claim to enforce it.
- Explicit authority designation: Every operation that uses authority should explicitely designate the source of the authority it is using.
- Relinquishable authority: If an application holds some authority, it should be able to voluntarily reduce this authority.
See also:
- [1] http://lists.gnu.org/archive/html/l4-hurd/2005-11/msg00120.html
- [2] EROS: A Principle-Driven Operating System from the Ground Up