This is the story of how we built MultiDrive, a high-speed disk management toolkit for Windows, here at Atola Technology. It began as a small idea and turned into a full-featured application. I’d like to show you what the process looked like from the inside: the challenges we faced and the decisions we had to make along the way.
Regardless of your experience in programming, this article will be an interesting adventure for you, so let’s get started!
Introduction
In 2025, as technology evolves faster than ever, with new frameworks, libraries, and powerful AI tools emerging every day, writing software has become easier, but building quality software is still a challenge. Many tech giants are ready to invest millions in hiring top talent to create products that are smooth and enjoyable to use. Yet, technical debt continues to grow, bugs keep slipping through, and never-ending hotfixes are the standard.
In my career as a software engineer, I had the chance to work at a product company that proved something important: to build a truly great product, you need to be involved, curious, and know that your ideas and contributions matter. That company is Atola Technology, a team that creates cutting-edge tools for digital forensics and data recovery, trusted by law enforcement, government agencies, and forensic labs in more than 90 countries.
Our team has created many trusted tools for disk imaging used by professionals around the world. But these are advanced and often expensive systems, not designed for everyday tasks like backing up a disk.
These days, most software tries to avoid hardware dependencies as much as possible. That became one of our key ideas when developing MultiDrive. The program takes up little disk space (~150 MB), doesn’t require any special hardware, and works right out of the box with no setup. It’s fast, intuitive, and user-friendly. This became the core philosophy of the project.
Market Overview
Before diving into what makes MultiDrive unique, it helps to see why a simple, reliable disk tool is needed in the first place.
Here’s a common scenario many users face:
Clone your drive when upgrading your system (hello SSD!)
Back up your entire drive to keep important files safe
Securely erase your old drive before reselling it
If you take a close look at what was already available on the market, you’ll find the most popular alternatives on Windows include Macrium Reflect, Acronis, AOMEI, EaseUS, Carbon Copy Cloner on Mac, and Clonezilla on Linux.
None of them are easy to use and 100% free to provide clone, erase, backup / restore tasks for your drives. According to widespread feedback online, people need something that just works, without payments, subscriptions, ads, or artificial limitations.
MultiDrive sets itself apart by being truly free for core disk tasks, offering an ad-free experience, a modern UI, and parallel operations right out of the box.
Development
Early development started in spring 2022 with a team comprising five software engineers, including myself as the lead, six quality assurance engineers, and one product manager.
Our goal wasn’t just to build a functional prototype, we aimed for a Minimum Lovable Product. In today’s world, there are countless MVPs, and most of them look and feel the same. We wanted to stand out by delivering something that users would actually enjoy using from day one. That meant focusing on quality, performance, and clean design, even in the very first version.
Desktop Framework
One of the first and most important decisions we had to make was choosing a framework for our desktop app. Since our whole team works with C# / .NET, we looked for options that fit that ecosystem.
At first, WPF (Windows Presentation Foundation) seemed like the natural choice. It’s a powerful and flexible UI system with many built-in components and excellent documentation. But there was a problem: WPF only works on Windows and doesn’t support other platforms, so it didn’t fit our future cross-platform goals. We also thought about using MAUI. However, back in early 2022, MAUI was still in preview and didn’t officially support Linux yet.
Then I suggested Avalonia Framework, an open-source, cross-platform UI toolkit for .NET that runs on Windows, Linux, and macOS. I had used Avalonia before during my previous projects, so I was confident it could work well. Avalonia also has a strong community and keeps getting better every day. That’s why we chose it as the base for our app.
Additional Tools
For storing data, we chose LiteDB, a lightweight, embedded NoSQL database that fits perfectly into desktop apps. It stores data in a single local file, which makes it easy to manage and deploy. We use it to save task metadata like file paths, progress, timestamps, and statuses. This allows users to resume backups exactly where they left off and to browse their task history instantly, without any delays or complex setups.
To make sure everything works reliably across different setups, we wrote a lot of unit tests using NUnit. It helped us quickly catch bugs and keep the core logic solid as new features were added. For UI testing, we used FlaUI, a powerful tool for simulating real user actions like clicking buttons and navigating the app. This allowed us to automate full end-to-end scenarios and ensure that the user interface behaves as expected after each update.
For the command-line version of MultiDrive, we used Spectre.Console, that helps build rich, interactive CLI apps with great user experience. It allowed us to create a clean interface with colored output, tables, progress bars, prompts, and better error messages.
Architecture
After choosing the tech stack, we moved on to planning the architecture of our application. Our goal was to build a solid foundation for the app, so we could deliver updates quickly, adding new features and improving workflows with minimal effort.
MVVM Pattern
We followed the Model-View-ViewModel pattern, which splits the code into three parts: the Model for data and business logic, the View for UI layout and interaction, and the ViewModel as a bridge between them. MVVM is a widely used architectural pattern in .NET desktop development that makes maintenance, testing, and code reuse much simpler.
Avalonia makes it really easy to follow MVVM right from the start. You write your UI in XAML and simply bind controls to properties or commands in your ViewModel, something like Text="{Binding SelectedDiskName}" or Command="{Binding SaveCommand}". Under the hood, when a ViewModel property changes, Avalonia’s binding system automatically tells the UI to update, so you never have to write extra “update” code. This keeps your UI code neat, and lets designers tweak XAML layouts without touching the data logic.
Dependency Injection
To keep our architecture clean and flexible, we also added Dependency Injection early in the project. This means that instead of hardcoding dependencies directly in classes, we pass them in from the outside, usually through constructors. With DI, it becomes much easier to write unit tests, swap implementations (e.g. mock services for testing), and manage the app’s overall structure as it grows. Avalonia works well with popular .NET DI containers, so setting it up was straightforward.
Styling & Customization
Next, we immediately turned our focus to making the app look and feel great. We wanted to support both dark and light themes, use clean and modern components, and make everything easy to use and configure.
What I loved about working at Atola Technology is how productive our focus groups are. You can bring up an idea, discuss it quickly, and start implementing it. No long meetings or weeks of waiting. Most components were built from scratch so they’d fit together seamlessly design-wise and avoid the overhead (disk space, performance) of third-party libraries.
Avalonia Features
To add dynamic logic to XAML, we created many Markup Extensions, similar to directives in Angular or Tag Helpers in Blazor. These are powerful tools for extending the UI in a clean and flexible way.
Here’s how you can use this in XAML markup:
Another awesome feature of Avalonia is Style Selectors (CSS-like). They let you apply styles to UI elements based on their type, state, class, name, or position in the visual tree. This gives you a lot of control without writing code-behind.
Design Challenge
The hardest part of UI was building a smooth, animated graph to show real-time backup speed. It had to update frequently, show accurate values with proper averaging, and still look good, all without overloading the CPU or memory. We used the LiveCharts2 library as a base and put in a lot of custom work to fine-tune the smooth animation and data handling, making the graph both responsive and lightweight.
Raw Disk Access
Now we’re getting to the most important part: what actually happens behind the scenes of the user interface. At the core of our low-level disk interactions are direct WinAPI calls using P/Invoke.
This approach gives us fine-grained control over disks, from sending raw I/O commands to accessing device properties, all without relying on third-party wrappers. It also lets us work with disks at a level where we can manage partitions and read/write sectors.
We wanted full disk backups to be space-efficient, so we chose to store them as compressed ZIP files. It seemed like a simple solution: ZIP is widely supported and easy to work with. But early on, we ran into a problem: the standard Deflate compression method was too slow for large backups.
By default, Deflate runs in a single thread, which doesn’t take full advantage of modern multi-core processors. For big files, this became a serious bottleneck and backups took longer than we wanted. To fix this, we used minizip-ng and reworked the compression system to run in parallel. We split the data into chunks and compressed each chunk using separate threads. This allowed us to speed up the process significantly, without changing the final ZIP format.
Pause & Resume Challenge
Another challenge we faced was adding support for pause and resume during backups. We wanted users to have full control, to be able to stop a backup at any time and continue it later, even the next day, without starting over.
This might sound simple, but in practice, it meant carefully tracking progress, writing partial data safely, and making sure everything could pick up exactly where it left off. We had to design a system that was both reliable and fast, without adding unnecessary complexity for the user.
MultiDrive has many smart, hidden features that you will discover only during regular use. One of them is that it automatically scans for drives in the OS every 5 seconds. It’s not straightforward to implement since it must be aligned with the drives used in running tasks (no need to scan) or some other app pages with their required drive details. DeviceCacherService is one of the classes designed for that.
Testing
Once we had a working version of the app ready, we moved on to the testing phase. Our testing strategy involved multiple phases:
Internal Testing (6 months): Extensive testing across different hardware configurations, from legacy IDE HDDs to modern NVMe SSDs, various configurations, and different Windows desktop and server operating systems.
Closed Beta Program (2 months): We invited 48 selected users: tech professionals, system administrators, and data recovery specialists. This was very helpful as our testers used the software in real situations that we hadn’t thought of.
Key insights from beta testing:
Users needed better visual feedback for long-running operations
Bunch of UX issues were found and addressed
Several I/O-related errors fixed due to wider variety of computers and drives
The beta program led to 7 major improvements and helped us identify and fix over 20 edge cases before a public release.
Key Features
Our main challenge was to find a balance between powerful functionality and ease of use. We have added the most necessary and commonly used features:
Backup: Create backup of your entire drive or its part in either ZIP or RAW format. Ensure data integrity using hash.
Clone: Create exact replicas of your drives. Ideal for upgrading to a better drive or creating bootable backups.
Restore: Restore a full drive or its parts from RAW or ZIP backup file.
Erase: Permanently wipe a full drive or its parts with a secure wiping method. Specify Hex pattern when needed.
CLI: Automate disk operations with a powerful CLI. Perfect for system administrators and tech enthusiasts.
Parallel Operations: Run multiple disk operations simultaneously to save time. Monitor progress from a single dashboard.
And if we ever introduce a Premium version in the future, rest assured that all the current functionality you rely on will stay free forever!
Release
MultiDrive was officially launched on April 14, 2025. On this unforgettable day, we finally took the leap.
We didn’t just launch a product. We launched a mission: to give people free tools to control their data. Whether you’re backing up precious memories, cloning drives in case of a server crash, or wiping old but sensitive files, MultiDrive is here to protect what matters most.
The app was warmly welcomed by the Avalonia Framework creators and added to the official showcase!
It didn’t take long to welcome our first 1,000 users, a clear sign that there was a real demand for a better solution. It all began with a simple idea: managing data should be easy, free, and safe. Since then, we’ve been building more than just software. We’ve been building trust.
Это история о том, как мы делали MultiDrive, быстрый набор инструментов для управления дисками под Windows, у нас в Atola Technology. Всё началось с маленькой идеи и выросло в полноценное приложение. Хочу показать вам, как этот процесс выглядел изнутри: с какими вызовами мы сталкивались и какие решения приходилось принимать по пути.
Независимо от вашего опыта в программировании, эта статья станет интересным приключением, так что поехали!
Введение
В 2025-м, когда технологии развиваются быстрее, чем когда-либо, и каждый день появляются новые фреймворки, библиотеки и мощные AI-инструменты, писать софт стало проще, но создавать качественный софт всё ещё сложно. Многие техногиганты готовы вкладывать миллионы в найм лучших специалистов, чтобы делать продукты, которыми приятно пользоваться. И всё же технический долг продолжает расти, баги продолжают просачиваться, и нескончаемые хотфиксы стали стандартом.
За свою карьеру software engineer я успел поработать в продуктовой компании, которая доказала важную вещь: чтобы сделать по-настоящему хороший продукт, нужно быть вовлечённым, любопытным и знать, что твои идеи и вклад важны. Эта компания, Atola Technology, команда, создающая передовые инструменты для цифровой форензики и восстановления данных, которым доверяют силовые структуры, госагентства и forensic-лаборатории более чем в 90 странах.
Наша команда создала много авторитетных инструментов для имиджинга дисков, которыми пользуются профессионалы по всему миру. Но это продвинутые и зачастую дорогие системы, не предназначенные для повседневных задач вроде бэкапа диска.
Сегодня большинство софта старается минимизировать зависимости от железа. Это стало одной из ключевых идей при разработке MultiDrive. Программа занимает мало места на диске (~150 MB), не требует специального железа и работает «из коробки» без настройки. Она быстрая, интуитивная и удобная, это стало основной философией проекта.
Обзор рынка
Прежде чем погрузиться в то, что делает MultiDrive уникальным, полезно понять, зачем вообще нужен простой и надёжный инструмент для дисков.
Типичный сценарий, с которым сталкиваются многие:
Клонировать диск при апгрейде системы (привет, SSD!)
Сделать полный бэкап диска, чтобы сохранить важные файлы
Безопасно стереть старый диск перед его перепродажей
Если внимательно посмотреть, что уже было на рынке, среди самых популярных альтернатив на Windows можно найти Macrium Reflect, Acronis, AOMEI, EaseUS, на Mac, Carbon Copy Cloner, а на Linux, Clonezilla.
Ни один из них не является простым в использовании и полностью бесплатным для задач clone / erase / backup / restore. По многочисленным отзывам в интернете, людям нужно что-то, что просто работает, без оплат, подписок, рекламы и искусственных ограничений.
MultiDrive выделяется тем, что он действительно бесплатен для базовых операций с дисками, без рекламы, с современным UI и параллельными операциями «из коробки».
Разработка
Ранний этап разработки начался весной 2022 года в команде из пяти software engineers (включая меня в роли тимлида), шести QA-инженеров и одного product manager.
Нашей целью был не просто рабочий прототип, мы метили в Minimum Lovable Product. Сегодня в мире огромное количество MVP, и большинство из них выглядят и ощущаются одинаково. Мы хотели выделиться и сделать то, что пользователи будут получать удовольствие использовать с первого дня. А это значит, фокус на качестве, производительности и чистом дизайне даже в самой первой версии.
Desktop framework
Одним из первых и самых важных решений был выбор фреймворка для desktop-приложения. Поскольку вся наша команда работает с C# / .NET, мы искали варианты, которые ложатся в этот экосистему.
Сначала WPF (Windows Presentation Foundation) казался естественным выбором. Это мощная и гибкая UI-система с множеством встроенных компонентов и отличной документацией. Но была проблема, WPF работает только на Windows и не поддерживает другие платформы, а это не вязалось с нашими планами на кросс-платформенность. Мы также подумывали о MAUI. Однако в начале 2022-го MAUI ещё был в preview и официально не поддерживал Linux.
Тогда я предложил Avalonia Framework, open source кросс-платформенный UI-тулкит для .NET, который работает на Windows, Linux и macOS. До этого я уже пользовался Avalonia в прошлых проектах, так что был уверен, что она подойдёт. У Avalonia сильное сообщество, и она становится лучше с каждым днём. Поэтому мы и выбрали её как основу для приложения.
Дополнительные инструменты
Для хранения данных мы выбрали LiteDB, лёгкую встроенную NoSQL-базу, которая идеально подходит для desktop-приложений. Она хранит данные в одном локальном файле, что упрощает управление и деплой. Мы используем её для хранения метаданных задач: путей к файлам, прогресса, timestamps и статусов. Это позволяет пользователям возобновлять бэкапы с точно той же точки, где они остановились, и мгновенно просматривать историю задач без задержек и сложных настроек.
Чтобы всё стабильно работало на разных конфигурациях, мы написали много юнит-тестов на NUnit. Это помогало быстро ловить баги и сохранять core-логику крепкой при добавлении новых фич. Для тестирования UI мы использовали FlaUI, мощный инструмент для симуляции реальных действий пользователя: кликов по кнопкам, навигации по приложению. Это позволило нам автоматизировать полноценные end-to-end сценарии и убеждаться, что UI ведёт себя как ожидается после каждого апдейта.
Для командной версии MultiDrive мы использовали Spectre.Console, она помогает делать богатые интерактивные CLI-приложения с приятным UX. Благодаря ей мы получили чистый интерфейс с цветным выводом, таблицами, прогресс-барами, prompts и более понятными сообщениями об ошибках.
Архитектура
После выбора стека мы перешли к планированию архитектуры приложения. Цель была заложить крепкий фундамент, чтобы быстро выкатывать апдейты, добавляя новые фичи и улучшая процессы с минимальными усилиями.
Паттерн MVVM
Мы пошли по Model-View-ViewModel, который делит код на три части: Model для данных и бизнес-логики, View для UI-разметки и взаимодействия, и ViewModel как мост между ними. MVVM, широко используемый архитектурный паттерн в .NET desktop-разработке, он сильно упрощает поддержку, тестирование и переиспользование кода.
Avalonia позволяет очень легко следовать MVVM с самого начала. Вы пишете UI в XAML и просто привязываете контролы к свойствам или командам ViewModel, что-то вроде Text="{Binding SelectedDiskName}" или Command="{Binding SaveCommand}". Под капотом, когда свойство ViewModel меняется, система биндингов Avalonia сама сообщает UI, что нужно обновиться, и вам не нужно писать дополнительный «update»-код. UI остаётся аккуратным, а дизайнеры могут править XAML-разметку, не трогая логику данных.
Dependency Injection
Чтобы архитектура оставалась чистой и гибкой, мы рано добавили Dependency Injection. То есть вместо того, чтобы хардкодить зависимости прямо в классах, мы передаём их снаружи, обычно через конструкторы. С DI становится намного проще писать юнит-тесты, подменять реализации (например, мокать сервисы для тестов) и управлять общей структурой приложения по мере роста. Avalonia хорошо дружит с популярными .NET DI-контейнерами, так что настройка прошла без проблем.
Стилизация и кастомизация
Дальше мы сразу переключили внимание на то, чтобы приложение выглядело и ощущалось отлично. Мы хотели поддержку тёмной и светлой тем, чистые современные компоненты и удобство в использовании и настройке.
Что мне нравилось в работе в Atola Technology, это насколько продуктивны наши focus-группы. Можно поднять идею, быстро её обсудить и сразу начать реализацию, никаких долгих митингов и недель ожидания. Большинство компонентов мы делали с нуля, чтобы они идеально сочетались по дизайну и чтобы избежать накладных расходов (место на диске, производительность) от сторонних библиотек.
Возможности Avalonia
Чтобы добавить динамическую логику в XAML, мы создали много Markup Extensions, похожих на directives в Angular или Tag Helpers в Blazor. Это мощные инструменты для расширения UI чистым и гибким способом.
Вот как это можно использовать в XAML-разметке:
Ещё одна классная фича Avalonia, Style Selectors (CSS-like). Они позволяют применять стили к UI-элементам по типу, состоянию, классу, имени или позиции в визуальном дереве. Это даёт большой контроль без необходимости писать code-behind.
Дизайнерский вызов
Самой сложной частью UI было создать плавный анимированный график, показывающий скорость бэкапа в реальном времени. Он должен был часто обновляться, показывать аккуратные значения с правильным усреднением и при этом хорошо выглядеть, и всё это без перегрузки CPU и памяти. В качестве базы мы взяли библиотеку LiveCharts2 и провели большую кастомную работу, чтобы отточить плавную анимацию и обработку данных, сделав график одновременно отзывчивым и лёгким.
Прямой доступ к диску
Теперь переходим к самой важной части, к тому, что на самом деле происходит за кулисами интерфейса. В основе наших низкоуровневых взаимодействий с дисками лежат прямые вызовы WinAPI через P/Invoke.
Этот подход даёт точный контроль над дисками: от отправки raw I/O команд до доступа к свойствам устройств, и всё это без зависимости от сторонних обёрток. Также это позволяет работать с дисками на уровне, где мы можем управлять разделами и читать / писать сектора.
Мы хотели, чтобы полные бэкапы диска занимали как можно меньше места, поэтому решили хранить их в виде сжатых ZIP-файлов. Решение казалось простым, ZIP широко поддерживается и удобен в работе. Но на ранних этапах мы наткнулись на проблему: стандартный метод сжатия Deflate оказался слишком медленным для больших бэкапов.
По умолчанию Deflate работает в одном потоке, что не использует современные многоядерные процессоры полностью. Для больших файлов это превратилось в серьёзное узкое место, и бэкапы занимали больше времени, чем хотелось. Чтобы исправить это, мы взяли minizip-ng и переработали систему сжатия так, чтобы она работала параллельно. Мы разбивали данные на чанки и сжимали каждый чанк в отдельных потоках. Это позволило значительно ускорить процесс, не меняя итоговый ZIP-формат.
Челлендж с паузой и возобновлением
Ещё один челлендж, поддержка пауз и возобновления во время бэкапов. Мы хотели, чтобы у пользователей был полный контроль: можно остановить бэкап в любой момент и продолжить позже, хоть на следующий день, не начиная заново.
Звучит просто, но на практике это означало аккуратно отслеживать прогресс, безопасно писать частичные данные и гарантировать, что всё может продолжиться ровно с той же точки. Нам пришлось спроектировать систему, которая одновременно надёжна и быстра, без лишней сложности для пользователя.
В MultiDrive есть много умных скрытых фич, которые вы обнаружите только при регулярном использовании. Одна из них, автоматическое сканирование дисков в ОС каждые 5 секунд. Это не так просто реализовать, нужно синхронизироваться с дисками, занятыми в активных задачах (их не нужно сканировать), и с теми, которые требуют отдельных страниц приложения с детальной информацией. Один из классов, разработанных для этого, DeviceCacherService.
Тестирование
Когда у нас была рабочая версия приложения, мы перешли в фазу тестирования. Наша стратегия состояла из нескольких этапов:
Внутреннее тестирование (6 месяцев): обширное тестирование на разных аппаратных конфигурациях, от старых IDE HDD до современных NVMe SSD, на разных конфигурациях и разных Windows-системах, как desktop, так и server.
Закрытая beta-программа (2 месяца): мы пригласили 48 отобранных пользователей: tech-профессионалов, системных администраторов и специалистов по data recovery. Это было очень полезно, тестировщики использовали софт в реальных ситуациях, о которых мы не думали.
Ключевые инсайты из беты:
Пользователям нужна была более понятная визуальная обратная связь для длительных операций
Нашли и поправили кучу UX-проблем
Несколько ошибок I/O исправили благодаря более широкому набору компьютеров и дисков
Beta-программа привела к 7 крупным улучшениям и помогла найти и исправить более 20 edge cases до публичного релиза.
Ключевые фичи
Главным вызовом было найти баланс между мощным функционалом и простотой использования. Мы добавили самые нужные и часто используемые возможности:
Backup: создание бэкапа всего диска или его части в формате ZIP или RAW. Контроль целостности данных по хэшу.
Clone: создание точных копий ваших дисков. Идеально для апгрейда на лучший диск или для создания загрузочных бэкапов.
Restore: восстановление полного диска или его частей из RAW или ZIP бэкап-файла.
Erase: безвозвратное стирание всего диска или его частей с использованием безопасных методов. По необходимости можно задать Hex-паттерн.
CLI: автоматизация дисковых операций через мощный CLI. Идеально для системных администраторов и техноэнтузиастов.
Параллельные операции: запуск нескольких дисковых операций одновременно для экономии времени. Мониторинг прогресса в едином дашборде.
И если в будущем мы введём Premium-версию, будьте уверены: вся текущая функциональность, на которую вы рассчитываете, останется бесплатной навсегда!
Релиз
MultiDrive официально вышел 14 апреля 2025 года. В этот незабываемый день мы наконец сделали шаг.
Мы запустили не просто продукт. Мы запустили миссию, дать людям бесплатные инструменты, чтобы контролировать свои данные. Бэкапите ли вы драгоценные воспоминания, клонируете диски на случай падения сервера или стираете старые, но чувствительные файлы, MultiDrive здесь, чтобы защитить то, что важно больше всего.
Приложение тепло встретили создатели Avalonia Framework и добавили его в официальный showcase!
Не пришлось долго ждать, чтобы встретить первые 1 000 пользователей, чёткий сигнал, что реальный спрос на лучшее решение существует. Всё началось с простой идеи: управление данными должно быть простым, бесплатным и безопасным. С тех пор мы строим не просто софт, мы строим доверие.
Das ist die Geschichte, wie wir MultiDrive gebaut haben, ein schnelles Toolkit für Disk-Management unter Windows, bei uns in Atola Technology. Es begann als kleine Idee und wurde zu einer voll ausgestatteten Anwendung. Ich möchte dir zeigen, wie der Prozess von innen aussah, mit welchen Herausforderungen wir konfrontiert waren und welche Entscheidungen wir unterwegs treffen mussten.
Unabhängig von deiner Erfahrung im Programmieren wird dieser Artikel ein interessantes Abenteuer für dich, also legen wir los!
Einleitung
2025, in einer Zeit, in der sich Technologie schneller entwickelt als je zuvor, mit neuen Frameworks, Libraries und mächtigen AI-Tools, die jeden Tag auftauchen, ist es einfacher geworden, Software zu schreiben, aber qualitativ hochwertige Software zu bauen bleibt eine Herausforderung. Viele Tech-Giganten sind bereit, Millionen in das Anwerben von Top-Talenten zu investieren, um Produkte zu schaffen, die geschmeidig und angenehm zu benutzen sind. Trotzdem wächst die technische Schuld weiter, Bugs schleichen sich immer wieder durch, und endlose Hotfixes sind der Standard.
In meiner Karriere als Software Engineer hatte ich die Chance, in einem Produktunternehmen zu arbeiten, das etwas Wichtiges bewiesen hat: um wirklich ein großartiges Produkt zu bauen, musst du involviert, neugierig sein und wissen, dass deine Ideen und Beiträge zählen. Diese Firma ist Atola Technology, ein Team, das modernste Tools für digitale Forensik und Datenwiederherstellung baut, denen Strafverfolgungsbehörden, Regierungsstellen und Forensik-Labors in mehr als 90 Ländern vertrauen.
Unser Team hat viele anerkannte Tools fürs Disk-Imaging gebaut, die von Profis weltweit genutzt werden. Aber das sind fortgeschrittene und oft teure Systeme, nicht für Alltagsaufgaben wie das Backup einer Festplatte gedacht.
Heutzutage versucht die meiste Software, Hardware-Abhängigkeiten so weit wie möglich zu vermeiden. Das wurde eine unserer Kernideen bei der Entwicklung von MultiDrive. Das Programm braucht wenig Speicherplatz (~150 MB), erfordert keine spezielle Hardware und läuft direkt out of the box ohne Setup. Es ist schnell, intuitiv und nutzerfreundlich, das wurde zur Kernphilosophie des Projekts.
Marktüberblick
Bevor wir eintauchen, was MultiDrive einzigartig macht, hilft es zu sehen, warum überhaupt ein einfaches, verlässliches Disk-Tool gebraucht wird.
Hier ein typisches Szenario, mit dem viele Nutzer konfrontiert sind:
Klone dein Laufwerk, wenn du dein System upgradest (hallo SSD!)
Sichere dein gesamtes Laufwerk, um wichtige Dateien zu schützen
Lösche dein altes Laufwerk sicher, bevor du es weiterverkaufst
Wenn du dir genau anschaust, was bereits auf dem Markt verfügbar war, findest du auf Windows die populärsten Alternativen wie Macrium Reflect, Acronis, AOMEI, EaseUS, auf Mac Carbon Copy Cloner und auf Linux Clonezilla.
Keines davon ist einfach zu bedienen und zu 100% kostenlos für Clone-, Erase-, Backup- und Restore-Aufgaben für deine Laufwerke. Laut zahlreichem Online-Feedback brauchen die Leute etwas, das einfach funktioniert, ohne Zahlungen, Abos, Werbung oder künstliche Beschränkungen.
MultiDrive hebt sich ab, indem es für die Kern-Disk-Aufgaben wirklich kostenlos ist, werbefrei, mit modernem UI und parallelen Operationen direkt aus der Box.
Entwicklung
Die frühe Entwicklung begann im Frühling 2022 mit einem Team aus fünf Software Engineers, einschließlich mir als Lead, sechs Quality-Assurance-Ingenieuren und einem Product Manager.
Unser Ziel war nicht nur ein funktionierender Prototyp, wir hatten ein Minimum Lovable Product im Visier. In der heutigen Welt gibt es unzählige MVPs, und die meisten sehen aus und fühlen sich gleich an. Wir wollten herausstechen und etwas liefern, was Nutzer ab Tag eins wirklich gerne benutzen. Das hieß Fokus auf Qualität, Performance und sauberem Design, schon in der allerersten Version.
Desktop-Framework
Eine der ersten und wichtigsten Entscheidungen war die Wahl des Frameworks für unsere Desktop-App. Da unser ganzes Team mit C# / .NET arbeitet, suchten wir nach Optionen, die ins Ökosystem passten.
Anfangs schien WPF (Windows Presentation Foundation) die natürliche Wahl. Es ist ein mächtiges, flexibles UI-System mit vielen eingebauten Komponenten und exzellenter Dokumentation. Aber es gab ein Problem, WPF läuft nur auf Windows und unterstützt keine anderen Plattformen, also passte es nicht zu unseren zukünftigen Cross-Platform-Zielen. Wir dachten auch an MAUI. Aber Anfang 2022 war MAUI noch im Preview und unterstützte Linux offiziell noch nicht.
Dann schlug ich Avalonia Framework vor, ein Open-Source-, cross-platform UI-Toolkit für .NET, das auf Windows, Linux und macOS läuft. Ich hatte Avalonia bereits in früheren Projekten genutzt, also war ich zuversichtlich, dass es gut funktionieren würde. Avalonia hat auch eine starke Community und wird jeden Tag besser. Deshalb haben wir es als Basis für unsere App gewählt.
Zusätzliche Tools
Für die Datenspeicherung wählten wir LiteDB, eine leichtgewichtige, eingebettete NoSQL-Datenbank, die perfekt in Desktop-Apps passt. Sie speichert Daten in einer einzigen lokalen Datei, was Management und Deployment vereinfacht. Wir nutzen sie, um Task-Metadaten wie Dateipfade, Fortschritt, Zeitstempel und Status zu speichern. Das erlaubt Nutzern, Backups genau dort fortzusetzen, wo sie aufgehört haben, und ihre Task-Historie sofort zu durchsuchen, ohne Verzögerungen oder komplexe Setups.
Damit alles über verschiedene Setups hinweg zuverlässig funktioniert, haben wir viele Unit-Tests mit NUnit geschrieben. Das half uns, Bugs schnell zu fangen und die Kern-Logik stabil zu halten, während neue Features hinzukamen. Fürs UI-Testing nutzten wir FlaUI, ein mächtiges Tool zur Simulation echter Nutzeraktionen wie Button-Klicks und Navigation durch die App. So konnten wir komplette End-to-End-Szenarien automatisieren und sicherstellen, dass das UI sich nach jedem Update wie erwartet verhält.
Für die Kommandozeilen-Version von MultiDrive nutzten wir Spectre.Console, das hilft, reichhaltige, interaktive CLI-Apps mit großartiger User Experience zu bauen. Es erlaubte uns, ein sauberes Interface mit farbigem Output, Tabellen, Progress-Bars, Prompts und besseren Fehlermeldungen zu schaffen.
Architektur
Nach der Wahl des Tech-Stacks gingen wir zur Planung der Architektur der Anwendung über. Unser Ziel war, ein solides Fundament für die App zu bauen, damit wir Updates schnell ausliefern, neue Features hinzufügen und Workflows mit minimalem Aufwand verbessern können.
MVVM-Pattern
Wir folgten dem Model-View-ViewModel-Pattern, das den Code in drei Teile teilt: das Model für Daten und Business-Logik, die View für UI-Layout und Interaktion, und das ViewModel als Brücke dazwischen. MVVM ist ein weit verbreitetes Architektur-Pattern in der .NET-Desktop-Entwicklung, das Wartung, Testen und Code-Wiederverwendung deutlich einfacher macht.
Avalonia macht es wirklich einfach, MVVM von Anfang an zu folgen. Du schreibst dein UI in XAML und bindest Controls einfach an Properties oder Commands in deinem ViewModel, etwa Text="{Binding SelectedDiskName}" oder Command="{Binding SaveCommand}". Unter der Haube, wenn sich eine ViewModel-Property ändert, sagt Avalonias Binding-System dem UI automatisch, es zu aktualisieren, du musst also nie extra „update”-Code schreiben. Das hält dein UI-Code sauber und lässt Designer XAML-Layouts anpassen, ohne die Datenlogik zu berühren.
Dependency Injection
Damit unsere Architektur sauber und flexibel bleibt, fügten wir früh Dependency Injection ins Projekt ein. Das heißt, statt Abhängigkeiten direkt in Klassen zu hardcoden, übergeben wir sie von außen, meist über Konstruktoren. Mit DI wird es viel einfacher, Unit-Tests zu schreiben, Implementierungen auszutauschen (etwa Mock-Services fürs Testen) und die Gesamtstruktur der App zu managen, während sie wächst. Avalonia funktioniert gut mit beliebten .NET-DI-Containern, also war die Einrichtung unkompliziert.
Styling und Customization
Als Nächstes konzentrierten wir uns sofort darauf, die App großartig aussehen und sich gut anfühlen zu lassen. Wir wollten sowohl Dark- als auch Light-Theme unterstützen, saubere und moderne Komponenten nutzen und alles einfach zu bedienen und zu konfigurieren machen.
Was ich an der Arbeit bei Atola Technology liebte, ist, wie produktiv unsere Fokus-Gruppen sind. Du kannst eine Idee einbringen, sie schnell diskutieren und mit der Umsetzung starten, keine langen Meetings, keine Wochen Wartezeit. Die meisten Komponenten haben wir von Grund auf gebaut, damit sie designtechnisch nahtlos zusammenpassen und um den Overhead (Speicherplatz, Performance) von Third-Party-Libraries zu vermeiden.
Avalonia-Features
Um dynamische Logik in XAML hinzuzufügen, schufen wir viele Markup Extensions, ähnlich wie Directives in Angular oder Tag Helpers in Blazor. Das sind mächtige Tools, um das UI auf saubere und flexible Weise zu erweitern.
So kannst du das in XAML-Markup nutzen:
Ein weiteres tolles Feature von Avalonia sind Style Selectors (CSS-like). Sie lassen dich Styles auf UI-Elemente basierend auf Typ, State, Klasse, Name oder Position im visuellen Baum anwenden. Das gibt dir viel Kontrolle, ohne Code-Behind schreiben zu müssen.
Design-Herausforderung
Der schwierigste Teil des UI war es, einen flüssigen, animierten Graphen zu bauen, der die Backup-Geschwindigkeit in Echtzeit zeigt. Er musste häufig aktualisiert werden, präzise Werte mit korrekter Mittelung anzeigen und gut aussehen, alles ohne CPU oder Speicher zu überlasten. Als Basis nahmen wir die LiveCharts2-Library und investierten viel eigene Arbeit, um die flüssige Animation und Datenverarbeitung zu verfeinern, damit der Graph reaktionsschnell und gleichzeitig leichtgewichtig ist.
Raw-Disk-Zugriff
Jetzt kommen wir zum wichtigsten Teil, dem, was tatsächlich hinter den Kulissen des User Interfaces passiert. Im Kern unserer Low-Level-Disk-Interaktionen stehen direkte WinAPI-Aufrufe mittels P/Invoke.
Dieser Ansatz gibt uns feingranulare Kontrolle über Laufwerke, vom Senden roher I/O-Kommandos bis zum Zugriff auf Geräteeigenschaften, alles ohne Abhängigkeit von Third-Party-Wrappern. Er lässt uns auch mit Laufwerken auf einer Ebene arbeiten, auf der wir Partitionen managen und Sektoren lesen/schreiben können.
Wir wollten, dass komplette Disk-Backups platzsparend sind, also entschieden wir, sie als komprimierte ZIP-Dateien zu speichern. Es schien eine einfache Lösung zu sein, ZIP wird weithin unterstützt und ist einfach zu handhaben. Aber früh stießen wir auf ein Problem: die standardmäßige Deflate-Kompressionsmethode war zu langsam für große Backups.
Standardmäßig läuft Deflate in einem einzelnen Thread, was moderne Multi-Core-Prozessoren nicht voll ausnutzt. Für große Dateien wurde das zu einem ernsthaften Engpass und Backups dauerten länger, als wir wollten. Um das zu fixen, nutzten wir minizip-ng und überarbeiteten das Kompressionssystem, sodass es parallel läuft. Wir teilten die Daten in Chunks und komprimierten jeden Chunk in separaten Threads. Das erlaubte uns, den Prozess deutlich zu beschleunigen, ohne das finale ZIP-Format zu ändern.
Pause- und Resume-Herausforderung
Eine weitere Herausforderung war, Unterstützung für Pause und Resume während Backups einzubauen. Wir wollten, dass Nutzer die volle Kontrolle haben, jederzeit ein Backup stoppen und später fortsetzen können, sogar am nächsten Tag, ohne von vorn anfangen zu müssen.
Das klingt vielleicht einfach, aber in der Praxis hieß das, sorgfältig Fortschritt zu tracken, Teildaten sicher zu schreiben und sicherzustellen, dass alles genau dort fortgesetzt werden kann, wo es aufgehört hat. Wir mussten ein System designen, das sowohl zuverlässig als auch schnell ist, ohne unnötige Komplexität für den Nutzer hinzuzufügen.
MultiDrive hat viele clevere, versteckte Features, die du nur bei regelmäßiger Nutzung entdeckst. Eines davon ist, dass es automatisch alle 5 Sekunden nach Laufwerken im OS scannt. Das umzusetzen ist nicht trivial, da es mit den in laufenden Tasks verwendeten Laufwerken (kein Bedarf zu scannen) oder mit App-Seiten mit ihren benötigten Laufwerksdetails synchronisiert werden muss. Der DeviceCacherService ist eine der dafür entworfenen Klassen.
Testing
Sobald wir eine arbeitsfähige Version der App fertig hatten, gingen wir in die Test-Phase. Unsere Test-Strategie umfasste mehrere Phasen:
Internes Testing (6 Monate): umfangreiches Testen über verschiedene Hardware-Konfigurationen hinweg, von alten IDE-HDDs bis zu modernen NVMe-SSDs, verschiedenen Konfigurationen und unterschiedlichen Windows-Desktop- und Server-Betriebssystemen.
Closed-Beta-Programm (2 Monate): wir luden 48 ausgewählte Nutzer ein, Tech-Profis, Systemadministratoren und Data-Recovery-Spezialisten. Das war sehr hilfreich, da unsere Tester die Software in realen Situationen einsetzten, an die wir nicht gedacht hatten.
Wichtige Erkenntnisse aus dem Beta-Testing:
Nutzer brauchten besseres visuelles Feedback für lang laufende Operationen
Eine Menge UX-Probleme wurden gefunden und behoben
Mehrere I/O-bezogene Fehler wurden dank der breiteren Vielfalt an Computern und Laufwerken behoben
Das Beta-Programm führte zu 7 großen Verbesserungen und half uns, über 20 Edge Cases vor einem Public Release zu identifizieren und zu fixen.
Wichtige Features
Unsere Hauptherausforderung war, eine Balance zwischen mächtiger Funktionalität und Benutzerfreundlichkeit zu finden. Wir haben die nötigsten und meistgenutzten Features hinzugefügt:
Backup: erstelle ein Backup deines gesamten Laufwerks oder eines Teils im ZIP- oder RAW-Format. Stelle Datenintegrität per Hash sicher.
Clone: erstelle exakte Replikate deiner Laufwerke. Ideal für Upgrades auf ein besseres Laufwerk oder für bootbare Backups.
Restore: stelle ein komplettes Laufwerk oder dessen Teile aus einer RAW- oder ZIP-Backup-Datei wieder her.
Erase: lösche ein komplettes Laufwerk oder dessen Teile dauerhaft mit einer sicheren Wipe-Methode. Spezifiziere bei Bedarf ein Hex-Muster.
CLI: automatisiere Disk-Operationen mit einem mächtigen CLI. Perfekt für Systemadministratoren und Tech-Enthusiasten.
Parallele Operationen: führe mehrere Disk-Operationen gleichzeitig aus, um Zeit zu sparen. Überwache den Fortschritt von einem einzigen Dashboard.
Und falls wir in Zukunft eine Premium-Version einführen, sei beruhigt: die gesamte aktuelle Funktionalität, auf die du dich verlässt, bleibt für immer kostenlos.
Release
MultiDrive wurde offiziell am 14. April 2025 veröffentlicht. An diesem unvergesslichen Tag haben wir endlich den Sprung gewagt.
Wir haben nicht nur ein Produkt gelauncht. Wir haben eine Mission gelauncht, den Menschen kostenlose Tools zu geben, um ihre Daten zu kontrollieren. Ob du wertvolle Erinnerungen sicherst, Laufwerke für den Fall eines Server-Crashes klonst oder alte, aber sensible Dateien löschst, MultiDrive ist hier, um zu schützen, was am wichtigsten ist.
Die App wurde von den Avalonia Framework-Machern herzlich aufgenommen und in den offiziellen Showcase aufgenommen.
Es dauerte nicht lange, bis wir unsere ersten 1.000 Nutzer begrüßen konnten, ein klares Zeichen, dass es eine echte Nachfrage nach einer besseren Lösung gibt. Alles begann mit einer einfachen Idee, Daten zu verwalten sollte einfach, kostenlos und sicher sein. Seitdem bauen wir mehr als nur Software, wir bauen Vertrauen.
C’est l’histoire de comment on a construit MultiDrive, un toolkit haute vitesse de gestion de disques pour Windows, chez Atola Technology. Ça a commencé comme une petite idée et c’est devenu une application complète. J’aimerais te montrer à quoi ressemblait le processus de l’intérieur, les défis qu’on a rencontrés et les décisions qu’on a dû prendre en chemin.
Peu importe ton expérience en programmation, cet article va être une aventure intéressante pour toi, alors c’est parti !
Introduction
En 2025, alors que la technologie évolue plus vite que jamais, avec de nouveaux frameworks, librairies et outils AI puissants qui émergent chaque jour, écrire des logiciels est devenu plus facile, mais construire un logiciel de qualité reste un défi. Beaucoup de géants tech sont prêts à investir des millions pour embaucher les meilleurs talents et créer des produits fluides et agréables à utiliser. Pourtant, la dette technique continue à croître, les bugs continuent de passer, et les hotfixes interminables sont devenus la norme.
Dans ma carrière de software engineer, j’ai eu la chance de travailler dans une boîte produit qui a prouvé quelque chose d’important : pour construire un produit vraiment génial, il faut être impliqué, curieux, et savoir que tes idées et contributions comptent. Cette boîte, c’est Atola Technology, une équipe qui crée des outils de pointe pour la forensique numérique et la récupération de données, à laquelle font confiance les forces de l’ordre, les agences gouvernementales et les labos forensiques dans plus de 90 pays.
Notre équipe a créé beaucoup d’outils reconnus pour l’imaging de disques, utilisés par des professionnels du monde entier. Mais ce sont des systèmes avancés et souvent chers, pas conçus pour des tâches du quotidien comme sauvegarder un disque.
De nos jours, la plupart des logiciels essaient d’éviter au maximum les dépendances matérielles. C’est devenu l’une de nos idées clés en développant MultiDrive. Le programme prend peu d’espace disque (~150 Mo), ne nécessite aucun matériel spécial, et fonctionne out of the box sans configuration. Il est rapide, intuitif et facile à utiliser, c’est devenu la philosophie centrale du projet.
Aperçu du marché
Avant de plonger dans ce qui rend MultiDrive unique, ça aide de voir pourquoi un outil de disque simple et fiable est nécessaire en premier lieu.
Voici un scénario classique auquel beaucoup d’utilisateurs font face :
Cloner ton disque quand tu upgrades ton système (bonjour SSD !)
Sauvegarder ton disque entier pour protéger les fichiers importants
Effacer ton vieux disque en toute sécurité avant de le revendre
Si tu regardes attentivement ce qui était déjà disponible sur le marché, tu trouveras les alternatives les plus populaires sur Windows comme Macrium Reflect, Acronis, AOMEI, EaseUS, sur Mac Carbon Copy Cloner, et sur Linux Clonezilla.
Aucun d’eux n’est facile à utiliser et 100% gratuit pour les tâches de clone, erase, backup / restore de tes disques. D’après le feedback largement répandu en ligne, les gens ont besoin de quelque chose qui marche, tout simplement, sans paiement, abonnement, pub ou limitations artificielles.
MultiDrive se distingue en étant vraiment gratuit pour les tâches disque essentielles, avec une expérience sans pub, un UI moderne, et des opérations parallèles directement out of the box.
Développement
Le développement précoce a commencé au printemps 2022 avec une équipe de cinq software engineers, dont moi en tant que lead, six ingénieurs quality assurance, et un product manager.
Notre objectif n’était pas juste de construire un prototype fonctionnel, on visait un Minimum Lovable Product. Dans le monde d’aujourd’hui, il y a d’innombrables MVPs, et la plupart ressemblent et fonctionnent de la même façon. On voulait se démarquer en livrant quelque chose que les utilisateurs aimeraient vraiment utiliser dès le premier jour. Ça voulait dire se concentrer sur la qualité, la performance et un design propre, même dans la toute première version.
Framework desktop
L’une des premières et plus importantes décisions à prendre, c’était le choix d’un framework pour notre app desktop. Comme toute notre équipe travaille avec C# / .NET, on a cherché des options qui collaient à cet écosystème.
Au début, WPF (Windows Presentation Foundation) semblait être le choix naturel. C’est un système UI puissant et flexible avec beaucoup de composants intégrés et une excellente documentation. Mais il y avait un problème, WPF ne marche que sur Windows et ne supporte pas d’autres plateformes, donc ça ne collait pas avec nos objectifs futurs cross-platform. On a aussi pensé à MAUI. Mais début 2022, MAUI était encore en preview et ne supportait pas officiellement Linux.
Alors j’ai suggéré Avalonia Framework, un toolkit UI open source et cross-platform pour .NET qui tourne sur Windows, Linux et macOS. J’avais déjà utilisé Avalonia lors de précédents projets, donc j’étais confiant que ça pouvait bien marcher. Avalonia a aussi une communauté forte et s’améliore chaque jour. C’est pour ça qu’on l’a choisi comme base pour notre app.
Outils additionnels
Pour le stockage des données, on a choisi LiteDB, une base NoSQL embarquée et légère qui s’intègre parfaitement aux apps desktop. Elle stocke les données dans un seul fichier local, ce qui rend la gestion et le déploiement faciles. On l’utilise pour sauvegarder les métadonnées des tâches comme les chemins de fichiers, le progrès, les timestamps et les statuts. Ça permet aux utilisateurs de reprendre les sauvegardes exactement là où ils s’étaient arrêtés et de parcourir leur historique de tâches instantanément, sans aucun délai ni configuration complexe.
Pour s’assurer que tout fonctionne de manière fiable sur différentes configurations, on a écrit beaucoup d’unit tests avec NUnit. Ça nous a aidés à attraper rapidement les bugs et à garder la logique core solide à mesure qu’on ajoutait de nouvelles features. Pour les tests UI, on a utilisé FlaUI, un outil puissant pour simuler de vraies actions utilisateur comme cliquer sur des boutons et naviguer dans l’app. Ça nous a permis d’automatiser des scénarios end-to-end complets et de s’assurer que l’interface se comporte comme attendu après chaque mise à jour.
Pour la version en ligne de commande de MultiDrive, on a utilisé Spectre.Console, qui aide à construire des apps CLI riches et interactives avec une excellente UX. Ça nous a permis de créer une interface propre avec une sortie en couleur, des tableaux, des progress bars, des prompts et de meilleurs messages d’erreur.
Architecture
Après avoir choisi le tech stack, on est passé à la planification de l’architecture de notre application. Notre objectif était de construire une base solide pour l’app, pour qu’on puisse livrer les mises à jour rapidement, ajouter de nouvelles features et améliorer les workflows avec un minimum d’effort.
Pattern MVVM
On a suivi le pattern Model-View-ViewModel, qui divise le code en trois parties : le Model pour les données et la business logic, la View pour la mise en page UI et l’interaction, et le ViewModel comme pont entre les deux. MVVM est un pattern architectural très utilisé dans le développement desktop .NET, qui rend la maintenance, le testing et le code reuse beaucoup plus simples.
Avalonia rend vraiment facile de suivre MVVM dès le départ. Tu écris ton UI en XAML et tu lies simplement les contrôles à des propriétés ou commandes dans ton ViewModel, quelque chose comme Text="{Binding SelectedDiskName}" ou Command="{Binding SaveCommand}". Sous le capot, quand une propriété du ViewModel change, le système de binding d’Avalonia dit automatiquement à l’UI de se mettre à jour, donc tu n’as jamais à écrire de code « update » supplémentaire. Ça garde ton code UI propre, et permet aux designers d’ajuster les layouts XAML sans toucher à la logique des données.
Dependency Injection
Pour garder notre architecture propre et flexible, on a aussi ajouté Dependency Injection tôt dans le projet. Ça veut dire qu’au lieu de hardcoder les dépendances directement dans les classes, on les passe depuis l’extérieur, généralement via les constructeurs. Avec DI, ça devient beaucoup plus facile d’écrire des unit tests, de swapper des implémentations (par exemple des mock services pour le testing), et de gérer la structure globale de l’app à mesure qu’elle grandit. Avalonia marche bien avec les containers DI .NET populaires, donc la mise en place a été simple.
Style et personnalisation
Ensuite, on a immédiatement porté notre attention à rendre l’app belle et agréable. On voulait supporter les thèmes dark et light, utiliser des composants propres et modernes, et rendre tout facile à utiliser et configurer.
Ce que j’aimais dans le fait de travailler chez Atola Technology, c’est à quel point nos focus groups sont productifs. Tu peux proposer une idée, la discuter rapidement et commencer à l’implémenter, pas de longues réunions ni de semaines d’attente. La plupart des composants ont été construits from scratch pour qu’ils s’intègrent parfaitement niveau design et pour éviter le surcoût (espace disque, performance) des librairies tierces.
Fonctionnalités d’Avalonia
Pour ajouter de la logique dynamique au XAML, on a créé beaucoup de Markup Extensions, similaires aux directives en Angular ou aux Tag Helpers en Blazor. Ce sont des outils puissants pour étendre l’UI d’une manière propre et flexible.
Voilà comment tu peux utiliser ça dans le markup XAML :
Une autre fonctionnalité géniale d’Avalonia, ce sont les Style Selectors (CSS-like). Ils te laissent appliquer des styles aux éléments UI en fonction de leur type, état, classe, nom ou position dans l’arbre visuel. Ça te donne beaucoup de contrôle sans écrire de code-behind.
Défi de design
La partie la plus dure de l’UI, c’était de construire un graphe animé et fluide pour montrer la vitesse de backup en temps réel. Il devait se mettre à jour fréquemment, montrer des valeurs précises avec une moyenne correcte, et continuer à avoir l’air bien, le tout sans surcharger le CPU ou la mémoire. On a utilisé la librairie LiveCharts2 comme base et on a mis pas mal de travail custom pour peaufiner l’animation fluide et la gestion des données, en rendant le graphe à la fois réactif et léger.
Accès disque bas niveau
Maintenant on arrive à la partie la plus importante, ce qui se passe vraiment derrière l’interface utilisateur. Au cœur de nos interactions disque bas niveau, il y a des appels directs WinAPI via P/Invoke.
Cette approche nous donne un contrôle fin sur les disques, de l’envoi de commandes I/O brutes à l’accès aux propriétés des devices, tout ça sans dépendre de wrappers tiers. Ça nous laisse aussi travailler avec les disques à un niveau où on peut gérer les partitions et lire/écrire des secteurs.
On voulait que les sauvegardes complètes de disque soient économes en espace, donc on a choisi de les stocker comme des fichiers ZIP compressés. Ça semblait une solution simple, ZIP est largement supporté et facile à manipuler. Mais tôt, on a rencontré un problème : la méthode de compression standard Deflate était trop lente pour de grosses sauvegardes.
Par défaut, Deflate tourne sur un seul thread, ce qui ne tire pas pleinement parti des processeurs multi-core modernes. Pour les gros fichiers, ça devenait un sérieux goulot d’étranglement et les sauvegardes prenaient plus de temps qu’on aurait voulu. Pour fixer ça, on a utilisé minizip-ng et retravaillé le système de compression pour qu’il tourne en parallèle. On découpait les données en chunks et on compressait chaque chunk en utilisant des threads séparés. Ça nous a permis d’accélérer significativement le processus, sans changer le format ZIP final.
Défi pause et reprise
Un autre défi, ajouter le support de la pause et de la reprise pendant les sauvegardes. On voulait que les utilisateurs aient le contrôle total, qu’ils puissent arrêter une sauvegarde à n’importe quel moment et la reprendre plus tard, même le lendemain, sans tout recommencer.
Ça peut paraître simple, mais en pratique, ça voulait dire suivre attentivement le progrès, écrire des données partielles de manière sûre, et s’assurer que tout pouvait reprendre exactement là où ça s’était arrêté. On a dû designer un système à la fois fiable et rapide, sans ajouter de complexité inutile pour l’utilisateur.
MultiDrive a beaucoup de fonctionnalités intelligentes et cachées que tu ne découvres qu’en l’utilisant régulièrement. L’une d’elles, c’est qu’il scanne automatiquement les disques dans l’OS toutes les 5 secondes. Ce n’est pas trivial à implémenter parce que ça doit être aligné avec les disques utilisés dans les tâches en cours (pas besoin de scanner) ou avec d’autres pages de l’app qui ont besoin de détails spécifiques sur les disques. DeviceCacherService est l’une des classes conçues pour ça.
Tests
Une fois qu’on avait une version fonctionnelle de l’app, on est passé à la phase de tests. Notre stratégie de test impliquait plusieurs phases :
Tests internes (6 mois) : des tests extensifs sur différentes configurations matérielles, des vieux HDD IDE aux SSD NVMe modernes, diverses configurations, et différents OS Windows desktop et server.
Programme Closed Beta (2 mois) : on a invité 48 utilisateurs sélectionnés : pros de la tech, administrateurs système, et spécialistes de la data recovery. Ça a été très utile parce que nos testeurs ont utilisé le logiciel dans des situations réelles auxquelles on n’avait pas pensé.
Insights clés du beta testing :
Les utilisateurs avaient besoin de meilleur feedback visuel pour les opérations longues
Tout un tas de problèmes UX ont été trouvés et corrigés
Plusieurs erreurs liées à l’I/O ont été corrigées grâce à une plus grande variété d’ordinateurs et de disques
Le programme bêta a mené à 7 améliorations majeures et nous a aidés à identifier et corriger plus de 20 edge cases avant la sortie publique.
Fonctionnalités clés
Notre principal défi était de trouver un équilibre entre fonctionnalités puissantes et facilité d’utilisation. On a ajouté les features les plus nécessaires et les plus couramment utilisées :
Backup : crée une sauvegarde de ton disque entier ou d’une partie, au format ZIP ou RAW. Assure l’intégrité des données via hash.
Clone : crée des répliques exactes de tes disques. Idéal pour upgrader vers un meilleur disque ou créer des sauvegardes bootables.
Restore : restaure un disque complet ou ses parties depuis un fichier de sauvegarde RAW ou ZIP.
Erase : efface définitivement un disque complet ou ses parties avec une méthode d’effacement sécurisée. Spécifie un pattern Hex au besoin.
CLI : automatise les opérations disque avec un CLI puissant. Parfait pour les administrateurs système et les enthousiastes tech.
Opérations parallèles : lance plusieurs opérations disque simultanément pour gagner du temps. Surveille le progrès depuis un seul dashboard.
Et si on introduit une version Premium dans le futur, sois rassuré, toute la fonctionnalité actuelle sur laquelle tu comptes restera gratuite pour toujours.
Sortie
MultiDrive a été officiellement lancé le 14 avril 2025. Ce jour inoubliable, on a enfin sauté le pas.
On n’a pas juste lancé un produit. On a lancé une mission, donner aux gens des outils gratuits pour contrôler leurs données. Que tu sauvegardes de précieux souvenirs, clones des disques en cas de crash serveur, ou effaces de vieux fichiers mais sensibles, MultiDrive est là pour protéger ce qui compte le plus.
L’app a été chaleureusement accueillie par les créateurs d’Avalonia Framework et ajoutée au showcase officiel !
Il n’a pas fallu longtemps pour accueillir nos premiers 1 000 utilisateurs, un signe clair qu’il y avait une vraie demande pour une meilleure solution. Tout a commencé avec une idée simple, gérer ses données devrait être facile, gratuit et sûr. Depuis, on construit plus qu’un logiciel, on construit de la confiance.
这是一个关于我们如何在 Atola Technology 做出 MultiDrive 的故事,一个面向 Windows 的高速磁盘管理工具集。它从一个小小的想法开始,最终成长为一个功能完整的应用。我想从内部视角向你展示这个过程是什么样的,我们遇到了什么挑战、一路上做了哪些决定。
不管你的编程经验如何,这篇文章对你来说都会是一段有趣的旅程,那我们开始吧!
引言
2025 年,技术发展比以往任何时候都更快,每天都有新的框架、库和强大的 AI 工具出现。写软件变容易了,但做出高质量的软件依然是个挑战。很多大厂愿意花数百万去招顶级人才,做出流畅、好用的产品。但技术债依然在增长,bug 不停溜过去,无止境的 hotfix 成了常态。
Discussion