Files
libfreemkv/CONTRIBUTING.md
T
MattJackson b9ea1d29dd libfreemkv v0.1.0 — Open source 4K UHD / Blu-ray / DVD drive library
Features:
- Open drive identification via SPC-4 INQUIRY + MMC-6 GET CONFIGURATION
- 141 supported drives with bundled profiles
- MT1959 platform: unlock, calibrate, raw sector reads
- DriveSpeed enum: BD1x-BD12x, DVD1x-DVD16x
- Field names follow SPC-4 §6.4.2 and MMC-6 §5.3.10 standards
- No proprietary fingerprints — open matching by SCSI fields
- Zero config: profiles compiled into binary

Tested on real hardware: HL-DT-ST BD-RE BU40N 1.03
2026-04-06 10:00:00 -07:00

2.1 KiB

Contributing to libfreemkv

Thank you for your interest in helping make disc archival accessible to everyone.

Contributing Drive Profiles

The most impactful contribution is adding support for new drives. If you have an optical drive that isn't listed in profiles/, we'd love your help.

How to submit drive data

  1. Install the tool:

    cargo install libfreemkv
    
  2. Run freemkv-info with your drive:

    freemkv-info /dev/sr0 --raw > my_drive.txt
    
  3. Open a pull request or issue with the output file attached.

That's it. The raw SCSI response data lets us build a profile for your drive.

What data is collected

freemkv-info --raw sends two standard SCSI commands to your drive:

  • INQUIRY (opcode 0x12) — returns drive vendor, model, firmware version
  • GET CONFIGURATION (opcode 0x46) — returns drive feature data

These are read-only, standard SCSI commands. They don't modify your drive or access any disc data. Every operating system sends these commands automatically when a drive is connected.

Priority: Pioneer drives

We especially need data from Pioneer Blu-ray drives (BDR-S08, BDR-S09, BDR-S12, BDR-S13, BDR-209, BDR-212, etc). If you have one, your contribution would help unlock support for 130+ Pioneer drive firmware versions.

Contributing Code

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-change)
  3. Write tests for your changes
  4. Ensure cargo test and cargo clippy pass
  5. Submit a pull request

Code Style

  • Run cargo fmt before committing
  • No unsafe without a comment explaining why
  • Public APIs need doc comments
  • Error handling via Result<T, Error>, no panics in library code

Architecture

  • src/scsi.rs — SCSI transport layer (SG_IO on Linux)
  • src/profile.rs — Profile loading and matching
  • src/platform/ — Per-chipset command implementations
  • src/drive.rs — High-level DriveSession API
  • profiles/ — JSON drive profile data

License

By contributing, you agree that your contributions will be licensed under AGPL-3.0.