snapraid/design.html
Andrea Mazzoleni 493c444c58 Auto update
2026-04-14 09:56:55 +02:00

202 lines
11 KiB
HTML

<!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">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<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">
<a href="index" class="logo">
<img src="android-chrome-192x192.png" width="32" height="32"/>
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>
<li><a href="compare" >Compare</a></li>
<li><a href="manual" >Manual</a></li>
<li><a href="faq" >FAQ</a></li>
<li><a href="support" >Support</a></li>
<li><a href="download" class="nav-cta">Download</a></li>
<li>
<button class="theme-toggle" aria-label="Toggle theme">
<svg class="sun-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
<svg class="moon-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
</button>
</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.
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>.
</p>
<p>
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>.
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>
Integrity checks use the highly efficient <a href="https://github.com/aappleby/smhasher">murmur3</a>
and <a href="https://burtleburtle.net/bob/hash/spooky.html">SpookyHash</a> hashes at 128 bits.
</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.
Internal structures use <a href="https://www.tommyds.it/">TommyDS</a>.
</p>
</div>
</div>
<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
<strong style="color: var(--text-primary);">manually validated</strong>.
</p>
<p>
Development follows a <strong style="color: var(--text-primary);">human-led</strong>, AI-assisted workflow. The developer defines the architecture and writes
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>
This approach improves development efficiency while preserving strict <strong style="color: var(--text-primary);">engineering oversight</strong> and reliability.
</p>
</div>
</div>
</div>
<!-- Footer -->
<footer>
<div class="container footer-content">
<div class="footer-col">
<div class="logo">
<img src="android-chrome-192x192.png" width="32" height="32"/>
SnapRAID
</div>
<p>Copyright &copy; 2026 Andrea Mazzoleni</p>
<p class="license">Distributed under GPL v3 License</p>
</div>
<div class="footer-col">
<h4>Links</h4>
<ul class="footer-list">
<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>
<li><a href="https://www.reddit.com/r/Snapraid/">Reddit</a></li>
<li><a href="https://sourceforge.net/p/snapraid/">SourceForge</a></li>
</ul>
</div>
</div>
</footer>
</body>
</html>