Add main Aaru documentation files.

This commit is contained in:
2021-08-18 02:59:46 +01:00
parent 8466e9376f
commit 7ea29fc39f
8 changed files with 3129 additions and 0 deletions

60
docs/CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,60 @@
# Contributor Covenant Code of Conduct for Aaru
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making
participation in our project and our community a harassment-free experience for everyone, regardless of age, body size,
disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take
appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits,
issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any
contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the
project or its community. Examples of representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed representative at an online or offline
event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team
at [claunia@claunia.com](mailto:claunia@claunia.com). All complaints will be reviewed and investigated and will result
in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain
confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be
posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent
repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available
at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org

299
docs/CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,299 @@
# Contributing to Aaru
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to Aaru and its modules. These are mostly guidelines, not rules.
Use your best judgment, and feel free to propose changes to this document in a pull request.
#### Table Of Contents
[Code of Conduct](#code-of-conduct)
[I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question)
[What should I know before I get started?](#what-should-i-know-before-i-get-started)
* [Aaru and modules](#aaru-and-modules)
[How Can I Contribute?](#how-can-i-contribute)
* [Reporting Devices](#reporting-devices)
* [Reporting Bugs](#reporting-bugs)
* [Suggesting Enhancements](#suggesting-enhancements)
* [Your First Code Contribution](#your-first-code-contribution)
* [Pull Requests](#pull-requests)
* [Patronizing us](#patronizing)
* [Donating hardware to test](#donating)
* [Providing information](#needed-information)
[Styleguides](#styleguides)
* [Git Commit Messages](#git-commit-messages)
* [Code Styleguide](#code-styleguide)
## Code of Conduct
This project and everyone participating in it is governed by the
[Aaru Code of Conduct](.github/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please
report unacceptable behavior to [claunia@claunia.com](mailto:claunia@claunia.com).
## I don't want to read this whole thing I just have a question!!!
> **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below.
You can join our IRC channel on irc.libera.chat at channel #Aaru
## What should I know before I get started?
### Aaru and modules
Aaru is a large open source project — it's made up of 18 modules. When you initially consider contributing to
Aaru, you might be unsure about which of those modules implements the functionality you want to change or report a bug
for. This section should help you with that.
Aaru is intentionally very modular. Here's a list of them:
* [Claunia.RsrcFork](https://github.com/claunia/Claunia.RsrcFork) - This library includes code for handling Mac OS
resource forks, and decoding them, so any code related to Mac OS resource forks should be added here.
* [Claunia.Encoding](https://github.com/claunia/Claunia.Encoding) - This library includes code for converting codepages
not supported by .NET, like those used by ancient operating systems, to/from UTF-8.
* [plist-cil](https://github.com/claunia/plist-cil) - This library includes code for handling Apple property lists.
* [SharpCompress](https://github.com/adamhathcock/sharpcompress) - This library includes code for handling compression
algorithms and compressed archives. Any need you have of compression or decompression should be handled with this
library, and any new algorithm should be added here.
* [Aaru](https://github.com/aaru-dps/Aaru/tree/master/Aaru) - This module contains the command line interface. In the
future a GUI will be added.
* [AaruRemote](https://github.com/aaru-dps/aaruremote) - Standalone small application designed to run on older machines
where Aaru does not run to allow device commands to be executed remotely.
* [Aaru.Checksums](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Checksums) - This module contains the checksum,
hashing and error correction algorithms.
* [Aaru.CommonTypes](https://github.com/aaru-dps/Aaru.CommonTypes) - This module contains interfaces, structures and
enumerations needed by more than one of the other modules.
* [Aaru.Console](https://github.com/aaru-dps/Aaru.Console) - This module abstracts consoles used by other modules to
output information, so they can be redirected to a CLI or to a GUI output.
* [Aaru.Core](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Core) - This module contains the implementation of the
functions and commands that are called by the user interface itself.
* [Aaru.Decoders](https://github.com/aaru-dps/Aaru.Decoders) - This module contains internal disk, drive and protocol
structures as well as code to marshal, decode and print them.
* [Aaru.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Devices) - This module contains code to talk with
hardware devices in different platforms. Each platform has lowlevel calls in its own folder, and each device protocol
has highlevel calls in its own folder. Device commands are separated by protocol standard, or vendor name.
* [Aaru.Device.Report](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Device.Report) - This is a separate application
in C89 designed to create device reports on enviroments where you can't run .NET or Mono but can run Linux.
* [Aaru.DiscImages](https://github.com/aaru-dps/Aaru/tree/master/Aaru.DiscImages) - This module provides reading
capabilities for the disk/disc images, one per file.
* [Aaru.DiscImages](https://github.com/aaru-dps/Aaru.Dto) - This module provides common structures between Aaru and
Aaru.Server.
* [Aaru.Filesystems](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filesystems) - This module provides the
filesystem support. If only identification is implemented a single file should be used. For full read-only support, a
folder should be used.
* [Aaru.Filters](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Filters) - A filter is a modification of the data
before it can be passed to the disk image module
(compression, fork union, etc), and this module provides support for them. If a image is compressed, say in gzip, or
encoded, say in AppleDouble, a filter is the responsible of decompressing or decoding it on-the-fly.
* [Aaru.Helpers](https://github.com/aaru-dps/Aaru.Helpers) - This module contains a collection of helpers for array
manipulation, big-endian marshalling, datetime conversion, hexadecimal printing, string manipulation and byte
swapping.
* [Aaru.Partitions](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Partitions) - This module contains code for
reading partition schemes.
* [Aaru.Server](https://github.com/aaru-dps/Aaru.Server) - This module contains the server-side code that's running
at https://www.aaru.app
* [Aaru.Settings](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Settings) - This module contains code for handling
Aaru settings.
* [Aaru.Tests](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests) - This module contains the unit tests for the
rest of the modules. You should add new unit tests here but cannot run all of them because the test images they
require amount to more than 100GiB.
* [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices) - This module presents a menu
driven interface to send commands to devices, as a way to test the Core module, as those tests cannot be automated. It
can be used to debug drive responses.
## How Can I Contribute?
### Reporting Devices
Aaru tries to be as universal as possible. However some devices do not behave in the expected ways, some media is
unknown and needs to be known prior to enabling dumping of it, etc.
For that reason, Aaru includes
the [device-report command](https://github.com/aaru-dps/Aaru/wiki/Reporting-physical-device-capabilities). Using this
command will guide you thru a series of questions about the device, and if it contains removable media, for you to
insert the different media you have, and create a report of its abilities. The report will automatically be sent to our
server and saved on your computer. Please note that we do not store any personal information and when possible remove
the drive serial numbers from the report.
If you have a drive attached to a computer that you cannot run the full Aaru on it but can compile a C89 application,
you can use [AaruRemote](https://github.com/aaru-dps/aaruremote)
and an ethernet connection between that machine and a machine that can run the full Aaru.
### Reporting Bugs
This section guides you through submitting a bug report for Aaru. Following these guidelines helps maintainers and the
community understand your report :pencil:, reproduce the behavior :computer: :computer:, and find related reports :
mag_right:.
Before creating bug reports, please check [this list](#before-submitting-a-bug-report) as you might find out that you
don't need to create one. When you are creating a bug report, please
[include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out
[the required template](.github/ISSUE_TEMPLATE.md), the information it asks for helps us resolve issues faster.
> **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
#### Before Submitting A Bug Report
* **Check the [wiki](https://github.com/aaru-dps/Aaru/wiki)** for a list of common questions and problems.
* **Determine [which module the problem should be reported in](#aaru-and-modules)**.
* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aclaunia)**
to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the
existing issue instead of opening a new one.
#### How Do I Submit A (Good) Bug Report?
Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've
determined [which module](#aaru-and-modules) your bug is related to, create an issue on that repository and provide the
following information by filling in
[the template](.github/ISSUE_TEMPLATE.md).
Explain the problem and include additional details to help maintainers reproduce the problem:
* **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by
explaining how you started Aaru, e.g. which command exactly you used in the terminal. Also note that some device
commands requires you to have administrative privileges, be in a specific group, or be the root user, so try it again
with escalated privileges.
* **Provide specific examples to demonstrate the steps**. Include links to media images, reports of the devices, or the
output of using [Aaru.Tests.Devices](https://github.com/aaru-dps/Aaru/tree/master/Aaru.Tests.Devices).
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that
behavior.
* **Explain which behavior you expected to see instead and why.**
* **Include a copy of the output in the terminal** enabling both verbose, using the `-v`
command line parameter, and debug, using the `-d` command line parameter, outputs.
* **If you're reporting that Aaru crashed**, try doing the same with the debug version and include a crash report with a
stack trace. Include the crash report in the issue in
a [code block](https://help.github.com/articles/markdown-basics/#multiple-lines), a
[file attachment](https://help.github.com/articles/file-attachments-on-issues-and-pull-requests/), or put it in
a [gist](https://gist.github.com/) and provide link to that gist.
* **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and
share more information using the guidelines below.
Include details about your configuration and environment:
* **Which version of Aaru are you using?**
* **What's the name and version of the OS you're using**?
* **Are you running Aaru in a virtual machine?** If so, which VM software are you using and which operating systems and
versions are used for the host and the guest?
* **Are you trying to execute a device command?** If so, who manufactured the device, which model is it, and how is it
connected to the computer?
### Suggesting Enhancements
This section guides you through submitting an enhancement suggestion for Aaru, including completely new features and
minor improvements to existing functionality. Following these guidelines helps maintainers and the community understand
your suggestion :pencil: and find related suggestions :mag_right:.
Before creating enhancement suggestions,
please [include as many details as possible](#how-do-i-submit-a-good-enhancement-suggestion). Fill
in [the template](.github/ISSUE_TEMPLATE.md), including the steps that you imagine you would take if the feature you're
requesting existed.
#### How Do I Submit A (Good) Enhancement Suggestion?
Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). After you've
determined [which module](#aaru-and-modules) your enhancement suggestion is related to, create an issue on that
repository and provide the following information:
* **Use a clear and descriptive title** for the issue to identify the suggestion.
* **Provide a step-by-step description of the suggested enhancement** in as many details as possible.
* **Provide specific examples to demonstrate the steps**. If the feature is about a media image, filesystem,
partitioning scheme, or filter, please include as many test files as possible, and if applicable which software
created them.
* **Describe the current behavior** and **explain which behavior you expected to see instead** and why.
* **List some other applications where this enhancement exists.**
* **Specify which version of Aaru you're using.**
* **Specify the name and version of the OS you're using.**
### Your First Code Contribution
Unsure where to begin contributing to Aaru? You can start by looking through these `beginner` and `help-wanted` issues:
* [Beginner issues][beginner] - issues which should only require a few lines of code, and a test or two.
* [Help wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues.
Both issue lists are sorted by total number of comments. While not perfect, number of comments is a reasonable proxy for
impact a given change will have.
If you want to read about using Aaru, the [wiki](https://github.com/aaru-dps/Aaru/wiki) is available.
Do not modify the interfaces. If you need or want to, comment in an issue how and why you want to change it and we'll
discuss it. Same applies for creating new interfaces.
Aaru uses C# 7 language features (inline declaration, Tuples, etc.) so it can only be compiled
with [VisualStudio](http://www.visualstudio.com) 2017 or higher, [Xamarin Studio](https://www.xamarin.com/download)
7 or higher, [MonoDevelop](http://www.monodevelop.com) 7 or higher,
or [JetBrains Rider](https://www.jetbrains.com/rider/) 2017.2 or higher.
### Pull Requests
* Fill in [the required template](.github/PULL_REQUEST_TEMPLATE.md)
* Do not include issue numbers in the PR title
* Follow the [code styleguide](#code-styleguide).
* Include test files as applicable, that do not have software under copyright inside them, if possible.
* Document new code based using XML documentation wherever possible.
* DO NOT end files with a newline.
* Avoid platform-dependent code, unless absolutely needed. Any call to a part of the .NET framework that doesn't start
with `System.` is probably platform-dependent.
* Do not call libraries external to .NET. Only Interop calls to the operating system kernel
(that is `KERNEL32.DLL` in Windows and `libc` in others) will be accepted. If you need to talk with a USB devices your
pull request must implement calls both to `WinUsb` and `libusb`.
### Patronizing
If you want to donate money you can become a patron at https://www.patreon.com/claunia
### Donating
You may donate us one of the [devices we need](NEEDED.md).
### Needed information
If you have test images, imaging applications that generate formats we do not support, or documentation about media dump
formats, filesystems or partitioning schemes we do not support, you can provide us with that information to add support
for them.
## Styleguides
### Git Commit Messages
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally after the first line
### Code Style Guide
- Braces are unindented at next line (BSD style).
- Braces with no content should be opened and closed in the same line.
- Constants should be ALL_UPPER_CASE.
- Do not use braces for statements that don't need them.
- Do not use more than one blank line.
- Do not use spaces before or after parentheses.
- Do not use `var` ever.
- `else`, `while`, `catch` and `finally` should be on a new line.
- If you know C apply a simple rule: Be as C as and as less C# or C++ as possible.
- If you will only store variables, use a struct. If you need it to be nullable, use a nullable struct if applicable.
- Indent statements and cases.
- Indent using 4 spaces (soft tab).
- Instace and static fields should be lowerCamelCase.
- Public fields should be UpperCamelCase.
- Separate attributes.
- Use 120 columns margins.
- Use built-in keywords: `uint` instead of `UInt32`.
- Use expression bodies only for properties, indexes and events. For the rest use block bodies.
- Use implicit modifiers.
- Use inline variable declaration.
- Use struct implicit constructor.
- Use UNIX (`\n`) endline character.
> Note: There is an included editorconfig file that sets the appropriate code style.
> Note: Aaru is quite low-level so unneeded object-oriented abstractions
(e.g. using classes when a struct suffices) will be rejected. LINQ is accepted.

2228
docs/Changelog.md Normal file

File diff suppressed because it is too large Load Diff

87
docs/GOVERNANCE.md Normal file
View File

@@ -0,0 +1,87 @@
# Aaru Governance
This document defines the project governance for Aaru.
## Overview
**Aaru**, an open source project, is committed to building an open, inclusive, and productive open source community focused on delivering a high quality tool that for backing up (dumping) various types of computer and game console media.
The community is governed by this document with the goal of defining how community should work together to achieve this goal.
## Code Repositories
The following code repositories are governed by Aaru community and maintained under the `aaru-dps` organization.
* **[Aaru](https://github.com/aaru-dps/aaru):** Main Aaru codebase.
* **[Aaru.Documentation](https://github.com/aaru-dps/Aaru.Documentation):** Official documentation.
* **[Aaru.Decryption](https://github.com/aaru-dps/Aaru.Decryption):** Library for the decryption of media.
* **[Aaru.CommonTypes](https://github.com/aaru-dps/Aaru.CommonTypes):** Common types needed by the different Aaru modules.
* **[Aaru.Decoders](https://github.com/aaru-dps/Aaru.Decoders):** Library for the decoding of structures from media and drives.
* **[Aaru.Server](https://github.com/aaru-dps/Aaru.Server):** https://aaru.app server codebase.
* **[fstester](https://github.com/aaru-dps/fstester):** Toolkit for the generation of test filesystems for later reverse engineer.
* **[aaruremote](https://github.com/aaru-dps/aaruremote):** Small application allowing to send Aaru commands to a different computer.
* **[Aaru.Dto](https://github.com/aaru-dps/Aaru.Dto):** DTOs for interchange between client and server portions of Aaru.
* **[Aaru.Console](https://github.com/aaru-dps/Aaru.Console):** Text console handler.
* **[Aaru.Helpers](https://github.com/aaru-dps/Aaru.Helpers):** Helper functions.
* **[Aaru.Checksums](https://github.com/aaru-dps/Aaru.Checksums):** Library that implements the hashing functionality.
* **[010templates](https://github.com/aaru-dps/010templates):** Templates for [010editor](https://www.sweetscape.com/010editor).
* **[libaaruformat](https://github.com/aaru-dps/libaaruformat):** Main implementation of Aaru Media Image Format.
* **[Aaru.VideoNow](https://github.com/aaru-dps/Aaru.VideoNow):** VideoNow decoding and converting tool.
* **[archaaru](https://github.com/aaru-dps/archaaru):** Scripts for the generation of Arch Linux Rescue CD including Aaru Data Preservation Suite.
* **[Aaru.Dreamcast](https://github.com/aaru-dps/Aaru.Dreamcast):** Tool for dumping GD-ROM using a real Dreamcast.
## Community Roles
* **Users:** Members that engage with the Aaru community via any medium (Discord, GitHub, etc.).
* **Contributors:** Regular contributions to projects (documentation, code reviews, responding to issues, participation in proposal discussions, contributing code, etc.).
* **Technical committee**: Provide input and feedback on roadmap items, grounded in common use cases for the committee member's organizations. Committee members might sponsor certain aspects of the project, however sponsorships are not a requirement for a committee member role.
* **Maintainers**: The Aaru project leaders. They are responsible for the overall health and direction of the project; final reviewers of PRs and responsible for releases. Some Maintainers are responsible for one or more components within a project, acting as technical leads for that component. Maintainers are expected to contribute code and documentation, review PRs including ensuring quality of code, triage issues, proactively fix bugs, and perform maintenance tasks for these components.
### Maintainer nomination
New maintainers must be nominated by an existing maintainer and must be elected by a supermajority of existing maintainers. Likewise, maintainers can be removed by a supermajority of the existing maintainers or can resign by notifying one of the maintainers.
### Technical committee member nomination
New technical committee members must be nominated by an existing member and must be elected by a supermajority of existing members. Likewise, members can be removed by a supermajority of the existing members or can resign by notifying one of the members.
### Supermajority
A supermajority is defined as two-thirds of members in the group.
A supermajority of [Maintainers](#maintainers) is required for certain decisions as outlined above. A supermajority vote is equivalent to the number of votes in favor being at least twice the number of votes against. For example, if you have 5 maintainers, a supermajority vote is 4 votes. Voting on decisions can happen on the mailing list, GitHub, Discord, email, or via a voting service, when appropriate. Maintainers can either vote "agree, yes, +1", "disagree, no, -1", or "abstain". A vote passes when supermajority is met. An abstain vote equals not voting at all.
### Decision Making
We try to operate more on consensus than on votes, seeking agreement from the people who will have to do the work.
Natalia Portillo ([@claunia](https://github.com/claunia)) is the self-appointed benevolent dictator for life (SABDFL) for Aaru.
The community functions best when it can reach broad consensus about a way forward. However, it is not uncommon in the open-source world for there to be multiple good arguments, no clear consensus, and for open questions to divide communities rather than enrich them. The debate absorbs the energy that might otherwise have gone towards the creation of a solution. In many cases, there is no one right answer, and what is needed is a decision more than a debate. The SABDFL acts to provide clear leadership on difficult issues, and set the pace for the project.
## Lazy Consensus
To maintain velocity in Aaru, the concept of [Lazy
Consensus](http://en.osswiki.info/concepts/lazy_consensus) is practiced. Ideas
and / or proposals should be shared by maintainers via
GitHub with the appropriate maintainers tagged. Out of respect for other contributors,
major changes should also be accompanied by a notification on Discord or a note on the
mailing list (not created yet) as appropriate. Author(s) of proposal, Pull Requests,
issues, etc. will give a time period of no less than five (5) working days for
comment and remain cognizant of popular observed world holidays.
Other maintainers may chime in and request additional time for review, but
should remain cognizant of blocking progress and abstain from delaying
progress unless absolutely needed. The expectation is that blocking progress
is accompanied by a guarantee to review and respond to the relevant action(s)
(proposals, PRs, issues, etc.) in short order.
Lazy Consensus is practiced for all projects in the `aaru-dps` org, including
the main project repository and the additional repositories.
Lazy consensus does _not_ apply to the process of:
* Removal of maintainers from Aaru
## Updating Governance
All substantive changes in Governance require a supermajority agreement by all maintainers.

28
docs/MAINTAINERS.md Normal file
View File

@@ -0,0 +1,28 @@
# Aaru Maintainers and Stakeholders
[GOVERNANCE.md](https://github.com/aaru-dps/aaru/blob/main/GOVERNANCE.md) describes governance guidelines and maintainer responsibilities.
## Maintainers
| Maintainer | GitHub ID | Affiliation |
| --------------- | --------- | ----------- |
| Natalia Portillo | [claunia](https://github.com/claunia) | [Aaru](https://aaru.app) |
| Michael Drüing | [darkstar](https://github.com/darkstar) | [Aaru](https://aaru.app) |
| Rebecca Wallander | [FakeShemp](https://github.com/FakeShemp) | [Aaru](https://aaru.app) |
## Technical committee
| TC Member | GitHub ID | Affiliation |
| --------------- | --------- | ----------- |
| Robin François| [robin-francois](https://github.com/robin-francois) | Cinémathèque suisse |
| Joseph Redon | X | Game Preservation Society |
| Jonas Rosland | [jonasrosland](https://github.com/jonasrosland) | Hit Save! |
## Aaru Contributors & Stakeholders
| Feature | Contributor | GitHub ID | Affiliation |
| --------------- | --------- | ----------- | --- |
| Development | Michael Drüing | [darkstar](https://github.com/darkstar) | [Aaru](https://aaru.app) |
| Development | Rebecca Wallander | [FakeShemp](https://github.com/FakeShemp) | [Aaru](https://aaru.app) |
| QA | Silas Laspada | [SilasLaspada](https://github.com/SilasLaspada) | [Aaru](https://aaru.app) |
| MPF (UI) | Matt Nadareski | [mnadareski](https://github.com/mnadareski) | SabreTools |

141
docs/NEEDED.md Normal file
View File

@@ -0,0 +1,141 @@
This is a list of hardware, software, and general information needed to expand and better support various unique
hardware and software configurations for Aaru. We accept donation of this hardware, or loans: paying for shipping is
greatly appreciated, but can make other arrangements depending on cost. For media, we do accept loans, but please be
aware that due to its age, there is no guarantee it will still be working after it is returned and thus donations are
preferred.
Drives
======
This is a list of drives. The reason we need these drives is because it is the only way to add enhanced support for
them (e.g. media detection, ECC support, raw dumping, etc.). Also some drives depart from the specifications and need
special workarounds. If a drive is listed here, but the media it uses is not listed below, we already have media for it.
Drives are preferred in ATA/ATAPI, SCSI, USB or FireWire buses. Parallel port drives require a larger amount of work,
and there is no guarantee it can work, at all, with other drives. If in doubt, please contact us.
- 5.25" magneto-optical (preferibly the 9.6Gb supporting one)
- 8" shugart floppy drive (preferibly the 240VAC one)
- ADR tape drive
- AIT tape drive
- Apple FileWare "twiggy"
- Caleb UHD144
- Castlewood Orb 5.7
- DLT tape drive
- DiscFerret
- Host-aware and host-controlled SAS and SATA zoned hard disks
- Iomega Ditto tape drive
- LD-ROM
- LTO 1, 3, 4, 6, 7
- LV-ROM
- Mammoth tape
- Plasmon UDO 2
- SLR tape drive
- Stringy floppy drive
- Syquest Quest drive
- Syquest SQ2542 drive
- Syquest SQ306RD drive
- Syquest SQ312RD drive
- Syquest SQ5110 drive
- Syquest SQ555 drive
- T9840, T9940, T10000 tape drives
- Travan tape drive
- Triton drive
- VXA tape drive
Media
=====
This is the media for the drives listed above, or media for drives we do have, but lack and thus cannot test the actual
hardware.
- 5.25" magneto-optical media: 128MiB
- ADR tapes
- AIT tapes
- Apple FileWare "twiggy" floppies
- Caleb UHD144 floppy
- Castlewood Orb 5.7
- DLTtape, DLTtapeII, DLTtapeIII
- Rewritable HD-DVD
- Iomega Ditto drive and tapes
- LD-ROM
- LTO 3, 4, 6, 7 tapes
- LV-ROM
- Mammoth tapes
- Plasmon UDO 2
- SLR tapes
- Stringy floppy
- Syquest Quest media
- Syquest SQ2542 media
- Syquest SQ100 media
- Syquest SQ200 media
- Syquest SQ300 media
- T9840, T9940, T10000 tapes
- Travan tapes
- Triton media
- VXA tapes
Software
==================
This is a list of software whose physical media has some characteristics that needs to be investigated to allow correct
dumping of such characteristics. Usually those are copy protections.
- CD-i Ready
- Accelerator
- Alien Gate
- Beyond Limits
- Escape
- Lucky Luke
- Louis Armstrong
- Dark Fables of Aesop
- More Dark Fables of Aesop
- Mozart
- Opera Imaginaire
- Pavarotti
- Steel Machine
- The Apprentice
- Dimo's Quest
- The Worlds of...
- SafeDisc
- Beowulf
- Black & White 2
- Brothers in Arms: Road to Hill 30
- Carmageddon II: Carpocalypse Now
- Close Combat: Invasion Normandy
- Codename: Eagle
- SecuROM
- Arabian Nights
- Arcania: Gothic 4
- Boiling Point: Road to Hell
- Cars 2
- Colin McRae Rally 04
- Colin McRae Rally 2.0
- Colin McRae Rally 3
- Command & Conquer: Red Alert 3 - Uprising
- Devil May Cry 4
- Die Hard: Nakatomi Plaza
- Disney Planes
- StarForce
- Black Mirror 3
- BloodRayne 2
- Chronostorm: Siberian Border
- Codename: Outbreak
- Dead to Rights
- Disciples III: Renaissance
- Mount & Blade
- Pac-Man World 2
- Tages
- Anno 1701
- Darkstar One
- Faery: Legends of Avalon
- Helldorado
- Nostradamus: The Last Prophecy
- Silverfall
- Solidshield
- A-Train 8
- Anno 2070
- Assassin's Creed: Brotherhood
- Dead Mountaineer's Hotel
- Dead Space 2
- Helldorado
- I Am Alive
- ObsCure II
- Shift 2 Unleashed
- Warfare

11
docs/NEEDINFO.md Normal file
View File

@@ -0,0 +1,11 @@
Information and test data
=========================
This is a list of information I need, including test disk images.
- DiscFerret stream images
- Information about the KenCode compression algorithm, or an implementation in C or Pascal
- Information about the structure and compression algorithm for XPACK disk images, or an implementation in C
- KryoFlux stream images
- NetWare 286 license and installation media for adding support to its filesystem
- NetWare 386 license and installation media for adding support to its filesystem

275
docs/README.md Normal file
View File

@@ -0,0 +1,275 @@
Aaru Data Preservation Suite v5.2.99.3380
Aaru
Copyright © 2011-2021 Natalia Portillo <claunia@claunia.com>
[![Build Status](https://dev.azure.com/Aaru-dps/aaru/_apis/build/status/aaru-dps.Aaru?branchName=master)](https://dev.azure.com/Aaru-dps/aaru/_build/latest?definitionId=7&branchName=master)
[![Build Status](https://travis-ci.org/aaru-dps/Aaru.svg?branch=master)](https://travis-ci.org/github/aaru-dps/Aaru)
[![Build status](https://ci.appveyor.com/api/projects/status/vim4c8h028pn5oys?svg=true)](https://ci.appveyor.com/project/claunia/aaru)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_shield)
You can see statistics and device reports [here](https://www.aaru.app/Stats)
Aaru is a fully featured media dump management solution. You usually know media dumps as disc images, disk images, tape
images, etc.
With Aaru you can identify a media dump, extract files from it (for supported filesystems), compare two of them, create
them from real media using the appropriate drive, create a sidecar metadata with information about the media dump, and a
lot of other features that commonly would require you to use separate applications.
To see last changes, check the [changelog](Changelog.md). To see list of pending things to do, check
the [list of issues](https://github.com/aaru-dps/Aaru/issues).
If you want to contribute in any way please read the [contributing guide](CONTRIBUTING.md).
Stable releases in [Github](https://github.com/aaru-dps/Aaru/releases).
System requirements
===================
Aaru is created using .NET Core 3.1 and can be compiled with all the major IDEs. To run it you require to use one of the
stable releases, or build it yourself.
Usage
=====
aaru.exe
And read help.
Or read the [documentation](https://github.com/aaru-dps/Aaru.Documentation/blob/master/5.0/README.md).
Features
========
* Identifies a disk image getting information about the disk itself and shows information about partitions and
filesystems inside them
* Can checksum the disks (and if optical disc, separate tracks) user-data (tags and metadata coming soon)
* Can compare two disk images, even different formats, for different sectors and/or metadata
* Can list and extract contents from supported filesystems
* Can read several disk image formats.
* Can read several known sector by sector formats with variable bytes per sector.
* Can read standard sector by sector copies for optical and magnetic discs with constant bytes per sector.
* Can verify sectors or disk images if supported by the underlying format
* Can dump media from ATA, ATAPI, SCSI, USB, FireWire and SDHCI drives (magnetic disks, optical discs, magnetoptical
disks, flash devices, memory cards and tapes) to several supported image formats.
* Can convert between image formats.
* Includes an open-source archival image format with compression and deduplication.
* Can create standard open XML metadata from existing images.
* Can measure readability and speed of media (same that can be dumped, MHDD style)
* Has an online database with drive capabilities, and can report the capabilities of any drive.
* Works on any operating system and architecture where .NET Core is supported (drive access requires Windows, Linux or
FreeBSD).
* Has a graphical interface (work in progress)
Supported disk image formats (read-only)
========================================
* Apple Disk Archival/Retrieval Tool (DART)
* Apple II nibble images (NIB)
* BlindWrite 4 TOC files (.BWT/.BWI/.BWS)
* BlindWrite 5/6 TOC files (.B5T/.B5I and .B6T/.B6I)
* CopyQM
* CPCEMU Disk file and Extended Disk File
* Dave Dunfield IMD
* DiscJuggler images
* Dreamcast GDI
* HD-Copy disk images
* MAME Compressed Hunks of Data (CHD)
* Microsoft VHDX
* Nero Burning ROM (both image formats)
* Partclone disk images
* Partimage disk images
* Quasi88 disk images (.D77/.D88)
* Spectrum floppy disk image (.FDI)
* TeleDisk
* X68k DIM disk image files (.DIM)
Supported disk image formats (read and write)
=============================================
* Alcohol 120% Media Descriptor Structure (.MDS/.MDF)
* Anex86 disk images (.FDI for floppies, .HDI for hard disks)
* Any 512 bytes/sector disk image format (sector by sector copy, aka raw)
* Apple 2IMG (used with Apple // emulators)
* Apple DiskCopy 4.2
* Apple ][ Interleaved Disk Image
* Apple Universal Disk Image Format (UDIF), including obsolete (previous than DiskCopy 6) versions
* Apridisk disk image formats (for ACT Apricot disks)
* Basic Lisa Utility
* CDRDAO TOC sheets
* CDRWin cue/bin cuesheets, including ones with ISOBuster extensions
* CisCopy disk image (aka DC-File, .DCF)
* CloneCD
* CopyTape
* DataPackRat's d2f/f2d disk image format ("WC DISK IMAGE")
* Digital Research DiskCopy
* DiskDupe (DDI)
* Aaru Format
* IBM SaveDskF
* MAXI Disk disk images (HDK)
* Most known sector by sector copies of floppies with 128, 256, 319 and 1024 bytes/sector.
* Most known sector by sector copies with different bytes/sector on track 0.
* Parallels Hard Disk Image (HDD) version 2
* QEMU Copy-On-Write versions 1, 2 and 3 (QCOW and QCOW2)
* QEMU Enhanced Disk (QED)
* Ray Arachelian's Disk IMage (.DIM)
* RS-IDE hard disk images
* Sector by sector copies of Microsoft's DMF floppies
* T98 hard disk images (.THD)
* T98-Next hard disk images (.NHD)
* Virtual98 disk images
* VirtualBox Disk Image (VDI)
* Virtual PC fixed size, dynamic size and differencing (undo) disk images
* VMware VMDK and COWD images
* XDF disk images (as created by IBM's XDFCOPY)
Supported partitioning schemes
==============================
* Acorn Linux and RISCiX partitions
* ACT Apricot partitions
* Amiga Rigid Disk Block (RDB)
* Apple Partition Map
* Atari AHDI and ICDPro
* BSD disklabels
* BSD slices inside MBR
* DEC disklabels
* DragonFly BSD 64-bit disklabel
* EFI GUID Partition Table (GPT)
* Human68k (Sharp X68000) partitions table
* Microsoft/IBM/Intel Master Boot Record (MBR)
* Minix subpartitions inside MBR
* NEC PC9800 partitions
* NeXT disklabel
* Plan9 partition table
* Rio Karma partitions
* SGI volume headers
* Solaris slices inside MBR
* Sun disklabel
* UNIX VTOC and disklabel
* UNIX VTOC inside MBR
* Xbox 360 hard coded partitions
* XENIX partition table
Supported file systems for read-only operations
===============================================
* 3DO Opera file system
* Apple DOS file system
* Apple Lisa file system
* Apple Macintosh File System (MFS)
* CD-i file system
* CP/M file system
* High Sierra Format
* ISO9660, including Apple, Amiga, Rock Ridge, Joliet and Romeo extensions
* Microsoft 12-bit File Allocation Table (FAT12), including Atari ST extensions
* Microsoft 16-bit File Allocation Table (FAT16)
* Microsoft 32-bit File Allocation Table (FAT32), including FAT+ extension
* U.C.S.D Pascal file system
* Xbox filesystems
Supported file systems for identification and information only
==============================================================
* Acorn Advanced Disc Filing System
* Alexander Osipov DOS (AO-DOS for Electronika BK-0011) file system
* Amiga Fast File System v2, untested
* Amiga Fast File System, with international characters, directory cache and multi-user patches
* Amiga Original File System, with international characters, directory cache and multi-user patches
* Apple File System (preliminary detection until on-disk layout is stable)
* Apple Hierarchical File System (HFS)
* Apple Hierarchical File System+ (HFS+)
* Apple ProDOS / SOS file system
* AtheOS file system
* BeOS filesystem
* BSD Fast File System (FFS) / Unix File System (UFS)
* BSD Unix File System 2 (UFS2)
* B-tree file system (btrfs)
* Coherent UNIX file system
* Commodore 1540/1541/1571/1581 filesystems
* Cram file system
* DEC Files-11 (only checked with On Disk Structure 2, ODS-2)
* DEC RT-11 file system
* dump(8) (Old historic BSD, AIX, UFS and UFS2 types)
* ECMA-67: 130mm Flexible Disk Cartridge Labelling and File Structure for Information Interchange
* Flash-Friendly File System (F2FS)
* Fossil file system (from Plan9)
* HAMMER file system
* High Performance Optical File System (HPOFS)
* HP Logical Interchange Format
* IBM Journaling File System (JFS)
* Linux extended file system
* Linux extended file system 2
* Linux extended file system 3
* Linux extended file system 4
* Locus file system
* MicroDOS file system
* Microsoft Extended File Allocation Table (exFAT)
* Microsoft/IBM High Performance File System (HPFS)
* Microsoft New Technology File System (NTFS)
* Microsoft Resilient File System (ReFS)
* Minix v2 file system
* Minix v3 file system
* NEC PC-Engine executable
* NEC PC-FX executable
* NILFS2
* Nintendo optical filesystems (GameCube and Wii)
* OS-9 Random Block File
* Professional File System
* QNX4 and QNX6 filesystems
* Reiser file systems
* SGI Extent File System (EFS)
* SGI XFS
* SmartFileSystem
* SolarOS file system
* Squash file system
* UNICOS file system
* Universal Disk Format (UDF)
* UNIX System V file system
* UNIX Version 7 file system
* UnixWare boot file system
* Veritas file system
* VMware file system (VMFS)
* Xenix file system
* Xia filesystem
* Zettabyte File System (ZFS)
Supported checksums
===================
* Adler-32
* CRC-16
* CRC-32
* CRC-64
* Fletcher-16
* Fletcher-32
* MD5
* SHA-1
* SHA-2 (256, 384 and 512 bits)
* SpamSum (fuzzy hashing)
Supported filters
=================
* Apple PCExchange (FINDER.DAT & RESOURCE.FRK)
* AppleDouble
* AppleSingle
* BZip2
* GZip
* LZip
* MacBinary I, II, III
* XZ
Partially supported disk image formats
======================================
These disk image formats cannot be read, but their contents can be checksummed on sidecar creation
* DiscFerret
* KryoFlux STREAM
* SuperCardPro
License
=======
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fclaunia%2FDiscImageChef?ref=badge_large)