0e943c3792ef36d87ca10556788375a3aa956d05
Per the seam audit: keep /src purely the generic contract and move everything unlocker-specific into its module. - ld's error type moves src/error.rs -> src/ld/error.rs; it owns the conversions From<scsi::ScsiError> (transport fault in) and From<ld::Error> for UnlockError (outcome out). src/scsi.rs keeps only the generic transport contract + a generic ScsiError; the trait no longer references any concrete error. - Remove set_max_read_speed from the Unlocker trait — raising read speed is drive tuning, NOT bus removal. libfreemkv will issue a generic SET CD SPEED itself at drive-open (tracked). 29 tests pass.
freemkv-unlock
Unlocker plugins for libfreemkv.
libfreemkv ships only the pluggable Unlocker trait + registry and stays
firmware-clean — it contains no concrete unlock code. Each crate in this
workspace implements one unlocker and is registered into libfreemkv by a single
line in the consuming binary:
libfreemkv::register_unlocker(Box::new(my_unlocker::MyUnlocker::new()));
Removing an unlocker is deleting that one line and the dependency (delete-to-comply).
Members
Each member is a self-contained unlocker plugin — see its own README for details.
License: AGPL-3.0-only.
Languages
Rust
100%