snapraid/beta/design.html

194 lines
9.7 KiB
HTML
Raw Normal View History

2026-02-13 00:52:06 +01:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="A backup program for disk arrays. It stores parity information of your data and it recovers from up to six disk failures">
<meta name="keywords" content="snapraid snapshot raid backup disk array redundancy parity">
<title>SnapRAID Design</title>
<link rel="stylesheet" href="style.css">
2026-02-14 19:05:59 +01:00
<link rel="apple-touch-icon" sizes="180x180" href="/beta/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/beta/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/beta/favicon-16x16.png">
<link rel="manifest" href="/beta/site.webmanifest">
2026-02-13 00:52:06 +01:00
<script src="script.js"></script>
<!-- Google Analytics 4 -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-W1Z5FKHYQ4"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-W1Z5FKHYQ4');
</script>
<!-- Google Universal Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21967501-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<header>
<div class="container nav-container">
2026-02-13 00:55:26 +01:00
<a href="index" class="logo">
2026-02-24 00:06:55 +01:00
<img src="android-chrome-192x192.png" width="32" height="32"/>
2026-02-13 00:52:06 +01:00
SnapRAID
</a>
<nav>
<input type="checkbox" id="menu-toggle">
<label for="menu-toggle" class="menu-icon"><svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg></label>
<ul>
<li><a href="index" >Home</a></li>
<li><a href="ui" >UI & Daemon</a></li>
<li><a href="howitworks" >How it Works</a></li>
<li><a href="design" class="active">Design</a></li>
2026-02-13 01:12:35 +01:00
<li><a href="compare" >Compare</a></li>
<li><a href="manual" >Manual</a></li>
2026-02-13 00:52:06 +01:00
<li><a href="faq" >FAQ</a></li>
<li><a href="support" >Support</a></li>
<li><a href="download" class="nav-cta">Download</a></li>
</ul>
</nav>
</div>
</header>
<div class="container" style="padding: 4rem 20px;">
<div style="text-align: center; margin-bottom: 4rem;">
<h1 style="margin-bottom: 1rem;">Design Philosophy</h1>
<blockquote style="font-size: 1.5rem; color: var(--text-accent); font-style: italic; margin: 0; padding: 0; border: none; font-family: serif;">
Simplicity is prerequisite for reliability
</blockquote>
<cite style="display: block; margin-top: 1rem; font-size: 1rem; color: var(--text-secondary); font-style: normal;">
<a href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra" style="color: var(--text-secondary); text-decoration: underline;">Edsger W. Dijkstra</a>
</cite>
</div>
<!-- Unix Philosophy & Reliability -->
<div style="max-width: 800px; margin: 0 auto 4rem auto;">
<p style="font-size: 1.1rem; color: var(--text-secondary); margin-bottom: 1.5rem;">
<strong style="color: var(--text-primary);">SnapRAID</strong> was created following the <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Unix philosophy</a>:
<em>Write programs that do one thing and do it well</em>.
</p>
</div>
<div class="grid grid-3-cols" style="margin-bottom: 4rem;">
<!-- Testing/Verification Card -->
<div class="card">
<h3>Reliability</h3>
<p>
The first design principle was <strong style="color: var(--text-primary);">reliability</strong>.
The result is a simple architecture and an easy to understand implementation.
</p>
<p>
Extensive and automated tests with the runtime checker <a href="http://valgrind.org/">Valgrind</a>
and with the <a href="https://github.com/google/sanitizers">Google Sanitizers</a>
are done to ensure the correctness of the final application.
2026-03-01 13:32:16 +01:00
The test has a <a href="/cov/">code coverage of over 90%</a>, measured with <a href="https://github.com/linux-test-project/lcov">lcov</a>.
2026-02-13 00:52:06 +01:00
</p>
<p>
2026-03-15 18:52:43 +01:00
SnapRAID is also verified with Coverity Scan for both the
<a href="https://scan.coverity.com/projects/snapraid">CLI</a> and the <a href="https://scan.coverity.com/projects/snapraid-daemon">Daemon</a>.
2026-02-13 00:52:06 +01:00
and <a href="http://clang-analyzer.llvm.org/">clang</a> static analyzers,
and with the <a href="http://lcamtuf.coredump.cx/afl/">American Fuzzy Lop</a> fuzzy tester.
</p>
</div>
<!-- Robustness Card -->
<div class="card">
<h3>Robustness</h3>
<p>
The second design principle was <strong style="color: var(--text-primary);">robustness</strong>.
It supports any kind of problem. Even on kernel panics, power-downs
or any other hard failure at runtime, your redundancy data is in safe hands.
</p>
<p>
It uses all the possible storage techniques to ensure to always keep consistent
redundancy even after critical interruptions.
</p>
</div>
<!-- Efficiency Card -->
<div class="card">
<h3>Efficiency</h3>
<p>
The third design principle was <strong style="color: var(--text-primary);">efficiency</strong>.
It's a native C application highly optimized to ensure maximum throughput of your disk array.
</p>
<p>
2026-03-01 13:33:00 +01:00
Integrity checks use the highly efficient <a href="https://github.com/aappleby/smhasher">murmur3</a>
2026-03-01 13:35:02 +01:00
and <a href="https://burtleburtle.net/bob/hash/spooky.html">SpookyHash</a> hashes at 128 bits.
2026-02-13 00:52:06 +01:00
</p>
<p>
Redundancy computations use a custom <a href="https://github.com/amadvance/snapraid/tree/master/raid">RAID library</a>
(based on Linux Kernel RAID) supporting up to six parity levels.
2026-03-01 13:33:00 +01:00
Internal structures use <a href="https://www.tommyds.it/">TommyDS</a>.
2026-02-13 00:52:06 +01:00
</p>
</div>
</div>
2026-03-13 23:25:23 +01:00
<div class="grid" style="margin-bottom: 4rem;">
<!-- AI -->
<div class="card">
<h3>Use of Artificial Intelligence</h3>
<p>
This project <strong style="color: var(--text-primary);">is not "vibe-coded"</strong>.
Artificial intelligence is used strictly as a
precision tool and a pair programmer, never as a substitute for engineering judgment. All architecture
decisions, core logic, and safety guarantees remain under direct human control and review.
</p>
<p>
AI was used selectively to accelerate front-end scaffolding, component layout, and alignment with modern UI
standards. All functional behavior, state management, API integration, and system logic were implemented and
2026-03-13 23:36:49 +01:00
<strong style="color: var(--text-primary);">manually validated</strong>.
2026-03-13 23:25:23 +01:00
</p>
<p>
2026-03-13 23:28:08 +01:00
Development follows a <strong style="color: var(--text-primary);">human-led</strong>, AI-assisted workflow. The developer defines the architecture and writes
2026-03-13 23:25:23 +01:00
the core implementations. AI contributes by exploring design alternatives, surfacing edge cases, suggesting
optimizations, and helping refine documentation. Any generated output is reviewed, revised where necessary,
and hardened before integration.
</p>
<p>
2026-03-13 23:28:08 +01:00
This approach improves development efficiency while preserving strict <strong style="color: var(--text-primary);">engineering oversight</strong> and reliability.
2026-03-13 23:25:23 +01:00
</p>
</div>
</div>
2026-02-13 00:52:06 +01:00
</div>
<!-- Footer -->
<footer>
<div class="container footer-content">
<div class="footer-col">
<h3>SnapRAID</h3>
<p>Copyright &copy; 2026 Andrea Mazzoleni</p>
<p class="license">Distributed under GPL v3 License</p>
</div>
<div class="footer-col">
<h4>Community</h4>
<ul>
<li><a href="https://www.reddit.com/r/Snapraid/">Reddit r/snapraid</a></li>
<li><a href="https://sourceforge.net/p/snapraid/discussion/1677233/">SourceForge Forum</a></li>
2026-02-25 00:33:58 +01:00
<li><a href="https://github.com/amadvance/snapraid/">GitHub SnapRAID CLI</a></li>
<li><a href="https://github.com/amadvance/snapraid-daemon/">GitHub SnapRAID Daemon</a></li>
2026-02-13 00:52:06 +01:00
</ul>
</div>
</div>
</footer>
</body>
</html>