<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx" -->

---
title: The latest on cmtp-responder, a permissively-licensed...
description: The cmtp-responder project, a permissively-licensed MTP responder for embedded Linux devices, has received several significant updates. A unified Docker-based...
canonical: https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: The latest on cmtp-responder, a permissively-licensed MTP responder implementation | daily.dev
og:description: The cmtp-responder project, a permissively-licensed MTP responder for embedded Linux devices, has received several significant updates. A unified Docker-based...
og:url: https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx
og:image: https://api.daily.dev/og/posts/MwjsjLccX.png
og:image:alt: The latest on cmtp-responder, a permissively-licensed MTP responder implementation
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# The latest on cmtp-responder, a permissively-licensed MTP responder implementation

**[Collabora Blog](https://daily.dev/sources/collabora)** · 11 min read · 0 upvotes · 0 comments

## Summary

The cmtp-responder project, a permissively-licensed MTP responder for embedded Linux devices, has received several significant updates. A unified Docker-based build environment now supports x86_64, armhf, and aarch64 architectures, with pre-built images available on ghcr.io. New deployment scripts simplify packaging and transferring build artifacts to target systems, with an important note that `--keep-directory-symlink` must be passed to tar due to modern distros using symlinks for /bin and /lib. A debos-based workflow enables testing in a QEMU virtual machine without real hardware. The project now includes a layered bats test suite with backends for Linux (gvfs), Windows PowerShell, and a placeholder for macOS. Various bug fixes and improvements to error messaging are also included, along with guidance on accessing MTP devices from a Linux host using gio or mtp-tools.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/news-and-blog/blog/2024/06/12/cmtp-responder-news>

## Questions this post answers

### How do I cross-compile cmtp-responder for aarch64 using Docker?

Clone the repo, run `cmtp-responder/Docker/aarch64.sh build` once to build the Docker image, then enter the container with `WORKDIR=${PWD} cmtp-responder/Docker/aarch64.sh run`. Inside the container, run `build-libusbgx.sh`, `build-gt.sh`, and `build-cmtp-responder.sh` in sequence. Pre-built images are also available from ghcr.io via `docker pull ghcr.io/cmtp-responder/cmtp-responder-build:aarch64`.

_Developers cross-compiling for embedded targets track project updates like these on daily.dev._

### Why does unpacking a tar.gz on a modern Linux system break /bin or /lib?

Modern Linux distributions have switched /bin and /lib to be symlinks rather than real directories. When tar unpacks an archive without the `--keep-directory-symlink` flag, it can overwrite these symlinks with actual directories, effectively destroying them. Always pass `--keep-directory-symlink` to tar when deploying to such systems to preserve the symlink structure.

_Embedded Linux engineers dealing with deployment edge cases like this find relevant discussions on daily.dev._

### What test frameworks and backends does cmtp-responder use for MTP testing?

cmtp-responder uses bats (Bash Automated Testing System) for its test suite, organized in a layered architecture. Architecture-agnostic driver test cases delegate to one of three backends: a Linux variant using gvfs and gio, a Windows PowerShell variant, and a placeholder for macOS (not yet implemented). Tests cover enumeration and file operations, configured via config.bash and mtp-device-id.bash.

_Teams building MTP or USB gadget test infrastructure can follow related tooling discussions on daily.dev._

## Similar posts on daily.dev

- [Linux 7.3 Adding Support For MCTP-Over-USB v1.1](https://daily.dev/posts/linux-7-3-adding-support-for-mctp-over-usb-v1-1-jwlhe4dog) · Phoronix · 0 upvotes · 0 comments
- [Recent Developments Part III](https://daily.dev/posts/recent-developments-part-iii-m4qzj1frv) · Happenings in GNOME · 0 upvotes · 0 comments
- [Progress Report: Linux 6.17](https://daily.dev/posts/progress-report-linux-6-17-f3cgpcenu) · Asahi Linux · 1 upvotes · 0 comments
- [FOSS Weekly \#26.39: Snapdragon X2, Ubuntu 26.10, Konsole, systemd Tricks and a New Project](https://daily.dev/posts/foss-weekly-26-39-snapdragon-x2-ubuntu-26-10-konsole-systemd-tricks-and-a-new-project-xiud4po4j) · It's Foss · 0 upvotes · 0 comments

---

Tags: [#docker](https://daily.dev/tags/docker), [#embedded](https://daily.dev/tags/embedded)

[View this post on daily.dev](https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"The latest on cmtp-responder, a permissively-licensed MTP responder implementation","url":"https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx"},"datePublished":"2026-08-11T08:54:34.886Z","dateModified":"2026-08-11T09:16:08.061Z","description":"The cmtp-responder project, a permissively-licensed MTP responder for embedded Linux devices, has received several significant updates. A unified Docker-based...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/eaae208df57988b9fce16feaebbe51fd?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/eaae208df57988b9fce16feaebbe51fd?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"docker,embedded","timeRequired":"PT11M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"The latest on cmtp-responder, a permissively-licensed MTP responder implementation"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/the-latest-on-cmtp-responder-a-permissively-licensed-mtp-responder-implementation-mwjsjlccx#faq","mainEntity":[{"@type":"Question","name":"How do I cross-compile cmtp-responder for aarch64 using Docker?","acceptedAnswer":{"@type":"Answer","text":"Clone the repo, run `cmtp-responder/Docker/aarch64.sh build` once to build the Docker image, then enter the container with `WORKDIR=${PWD} cmtp-responder/Docker/aarch64.sh run`. Inside the container, run `build-libusbgx.sh`, `build-gt.sh`, and `build-cmtp-responder.sh` in sequence. Pre-built images are also available from ghcr.io via `docker pull ghcr.io/cmtp-responder/cmtp-responder-build:aarch64`. Developers cross-compiling for embedded targets track project updates like these on daily.dev."}},{"@type":"Question","name":"Why does unpacking a tar.gz on a modern Linux system break /bin or /lib?","acceptedAnswer":{"@type":"Answer","text":"Modern Linux distributions have switched /bin and /lib to be symlinks rather than real directories. When tar unpacks an archive without the `--keep-directory-symlink` flag, it can overwrite these symlinks with actual directories, effectively destroying them. Always pass `--keep-directory-symlink` to tar when deploying to such systems to preserve the symlink structure. Embedded Linux engineers dealing with deployment edge cases like this find relevant discussions on daily.dev."}},{"@type":"Question","name":"What test frameworks and backends does cmtp-responder use for MTP testing?","acceptedAnswer":{"@type":"Answer","text":"cmtp-responder uses bats (Bash Automated Testing System) for its test suite, organized in a layered architecture. Architecture-agnostic driver test cases delegate to one of three backends: a Linux variant using gvfs and gio, a Windows PowerShell variant, and a placeholder for macOS (not yet implemented). Tests cover enumeration and file operations, configured via config.bash and mtp-device-id.bash. Teams building MTP or USB gadget test infrastructure can follow related tooling discussions on daily.dev."}}]}
```

