On a Mac or a Linux machine the FTDI question is rarely “which driver” and almost always “do I need one at all”. Linux has carried ftdi_sio in the mainline kernel for two decades, and Apple has bound the FT232R with its own driver since OS X 10.9. What goes wrong is different on each system: on the Mac an old FTDI kext fighting Apple’s driver, or a chip that is in System Information but has no port; on Linux a braille daemon stealing the port, a group you are not in, or a 16 ms timer you did not know existed. This guide gives the table of what binds 0403:6001 on each system, the official FTDI package for the cases where you do need it, and the thread or source behind every row. The Windows side, including the counterfeit lockout and the PID 0000 story, is on the FTDI FT232 driver for Windows page.

⬇ FTDI VCP driver for macOS, 1.6.0 (official download only)

macOS 11/12, 15 and 26 · DriverKit extension, installed by an app · released 6 Mar 2026 · FTDI’s licence does not allow mirrors, so there is no copy on this site

Download from ftdichip.com (VCP Drivers page)

File: FTDIUSBSerialVCPDextInstaller_1.6.0_NOTARIZED-DMG.zip (also offered as a dmg) · FTDI publishes no checksum and no archived copy exists yet, so download it from the FTDI page only · FTDI’s own note: delete every earlier FTDIUSBSerialVCPDextInstaller from Applications before installing 1.6.0 · clause 3.1.7 of the driver licence forbids redistribution.

For reference, the two previous packages are archived and we hashed them on 21 Oct 2026: the 1.5.0 dext installer dmg (Internet Archive, 252,178 bytes) is SHA-256 f535d604d5098c4ecde0f213a80732cd45906339472ae30c0723959336a50b9c, the exact value in the Homebrew cask; the 2.4.4 kext dmg for macOS 10.14 (archived, 75,526 bytes) is f3343fc223f667e1dab0ecf9fd8fade525c261f120a1cd6b29f8806fa6bc4d8b. Linux needs no download: FTDI’s page says it in one line, “VCP drivers are integrated into the kernel.”

FTDI's VCP driver table: Windows 2.12.36.20, Linux 'VCP drivers are integrated into the kernel', macOS 26/15/11/12 dext 1.6.0 dated 2026-03-06
FTDI’s “Currently Supported VCP Drivers” table: one line for Linux, and the 1.6.0 dext of 6 March 2026 for macOS. Screenshot of ftdichip.com/drivers/vcp-drivers as archived on 30 April 2026 by the Internet Archive.

What binds an FT232R on each system

The rows come from FTDI’s AN_134 and VCP page, Apple’s developer forums, the kernel source and the Ubuntu bug tracker. “Nothing to install” means the port appears as soon as the chip enumerates.

System What binds 0403:6001 Port name Install? What gets in the way
Mac OS X 10.3 – 10.8 FTDI kext FTDIUSBSerialDriver 2.2.18 (10 Aug 2012) /dev/cu.usbserial-XXXXXXXX Yes, the dmg Nothing else; the OS had no FTDI driver of its own
OS X 10.9 – 10.14 Apple’s AppleUSBFTDI.kext (a plugin inside IOUSBFamily.kext) /dev/cu.usbserial-XXXXXXXX No FTDI’s AN_134 §7.1: “A VCP driver for FTDI USB to serial converters (except the FT-X series) is provided as part of the kernel in OS X 10.9”. Installing FTDI’s 2.3 or 2.4.x kext on top creates a second claimant; AN_134 §3.2 says to disable Apple’s first
macOS 10.15 Catalina Apple’s DriverKit extension com.apple.DriverKit-AppleUSBFTDI.dext /dev/cu.usbserial-XXXXXXXX No Per the Apple Developer Forums (Jan 2020): “In Catalina, AppleUSBFTDK.kext is gone, and native FTDI device IDs are now supported by DriverKit.AppleUSBFTDI.dext”, and its Info.plist “only lists the native FTDI device IDs”. 10.15.1 shipped a bug that returned “port already in use” (thread), worked around with FTDI’s 2.4.2
macOS 11 – 26, Intel and Apple Silicon Apple’s dext; FTDI’s dext 1.6.0 if you install it /dev/cu.usbserial-XXXXXXXX No for stock FTDI IDs Monterey removed the old kernel driver, so there is nothing to unload (pylibftdi docs); custom VID/PIDs are the one reason for FTDI’s dext, see FAQ
Linux, any distro In-tree ftdi_sio (drivers/usb/serial/ftdi_sio.c, GPL) /dev/ttyUSB0 No Your user must be in dialout (Debian, Ubuntu) or uucp (Arch, Manjaro); ModemManager may hold the port for ~20 s, see the CP210x page
Ubuntu 22.04 before brltty 6.4-4ubuntu3 ftdi_sio, then brltty claims it ttyUSB0 for a moment No, but update brltty Bug 1958224 (Jan 2022): brltty’s udev rules “are claiming generic devices IDs” including 0403:6001; the fix adds a debconf question when such a device is plugged in during the upgrade. Unlike the CH340 case, this one was fixed in 22.04 itself
Linux with FTDI’s D2XX library Nothing: the library needs the kernel driver out of the way none Yes, libftd2xx AN_220 §2.1: sudo rmmod ftdi_sio and sudo rmmod usbserial before running a D2XX program; “When the FTDI device is power cycled or reset the VCP driver will be reloaded”

Table 2: which kernel first knew your chip

“Linux has the driver” is true, but not for every chip on every kernel. We read ftdi_sio.c and ftdi_sio_ids.h at each release tag on GitHub to find the first mainline kernel that names each chip. The driver identifies the chip from the USB bcdDevice field, the same number Windows shows as REV_xxxx in the Hardware Ids, so the second column is what you see on both systems.

Chip (name in dmesg) bcdDevice / REV Default PID Clock base the driver assumes First mainline kernel
FT232A, FT232B, FT2232C/D 0200, 0400, 0500 6001, 6001, 6010 48 MHz / 2 Already in 2.6.18 (Sep 2006), the oldest tag we checked
FT232R 0600 6001 48 MHz / 2 2.6.21 (Apr 2007); absent in 2.6.20
FT2232H, FT4232H 0700, 0800 6010, 6011 120 MHz / 2 2.6.31 (Sep 2009); absent in 2.6.30
FT232H 0900 6014 120 MHz / 2 3.0 (Jul 2011); absent in 2.6.39
FT-X (FT230X, FT231X, FT234XD…) 1000 6015 48 MHz / 2 3.4 (May 2012); absent in 3.3
Counterfeit chip with PID reset to 0000 by the 2014 Windows driver any 0000 as detected 3.18 (Dec 2014): “Add support for this VID/PID pair to correctly bind the driver on these devices”
FT2233HP, FT4233HP, FT2232HP, FT4232HP, FT233HP, FT232HP, FT4232HA 2800, 2900, 3000, 3100, 3200, 3300, 3600 6040, 6041, 6042, 6043, 6044, 6045, 6048 120 MHz / 2 6.1 (Dec 2022); absent in 6.0

Three consequences. An FT232R works on any distro still receiving updates. An FT232HP or FT4232HA breakout needs kernel 6.1 or newer, which rules out Ubuntu 22.04’s stock 5.15 and Debian 11. And a counterfeit “FT232RL” that Windows bricked in 2014 still enumerates and works on Linux, because the kernel deliberately binds PID 0000. The full ID list is in the VID/PID lookup table.

macOS: checking and installing

  1. Plug the adapter in. System Information → USB must list a device with Vendor ID 0x0403 (“FT232R USB UART” or similar). If it does not, the problem is the cable or the port, not a driver (problem 1 below).
  2. Run ls /dev/cu.*. On 10.9 or later you should already see cu.usbserial-XXXXXXXX, where the suffix is the chip’s serial number. If it is there, stop: nothing to install.
  3. Only if you need FTDI’s own driver (custom VID/PID, or a vendor tool that asks for it): on macOS 11 or later download the 1.6.0 zip from FTDI, move the app to Applications, open it and click Install. macOS asks you to allow the system extension in System Settings → Privacy & Security, then restart. On 10.9 to 10.14, FTDI’s AN_134 §3.2 says to disable Apple’s driver first: sudo kextunload -b com.apple.driver.AppleUSBFTDI, which lasts until the next reboot.
  4. To remove FTDI’s dext, drag the installer app to the Trash and restart; the cask note explains the extension stays otherwise. To remove an old kext: sudo rm -r /Library/Extensions/FTDIUSBSerialDriver.kext and reboot (AN_134 §4.2).

Linux: the three lines that tell you everything

Plug the adapter in and read the kernel log. A healthy sequence, from FTDI’s own AN_220, is:

ftdi_sio 9-1:1.0: FTDI USB Serial Device converter detected
usb 9-1: FTDI USB Serial Device converter now attached to ttyUSB0

Then ls -l /dev/ttyUSB0 shows the owning group, usually dialout, and groups must list it for your user; if not, sudo usermod -aG dialout $USER and log out and in. Third, the timer nobody tells you about: cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer returns 16, the default the driver sets at probe (priv->latency = 16 in ftdi_sio.c). The chip holds received bytes for up to 16 ms before sending a USB packet, which is why a request-reply protocol to an Arduino feels slow. Writing 1 to that file is allowed and takes effect when the port is next opened; Angus Gratton’s 2011 measurements put the round trip at 18–19 ms with the timer at 1–2 ms against 25 ms or more at the default (source).

Common problems, with the thread behind each

1. macOS: System Information shows “FT232R USB UART”, but no cu.usbserial port. In the Arduino forum thread (Ventura 13.1, Intel, old Mega, Jan 2025) the board worked on an M3 Mac with the same cable, and “another reboot fixed the problem”. If nothing appears in System Information at all, it is the cable: in the Monterey 12.1 thread one user installed FTDI’s driver and got a flaky port, the next one found only the Bluetooth port and “tried another USB cable and this time it worked”.

2. macOS 10.15.1: “port already in use”, errno 16, with nothing holding it. Reported with three different FTDI cables in the Apple Developer Forums; the workaround was FTDI’s VCP 2.4.2. If you are still on Catalina, that is the one version where FTDI’s kext is the fix rather than the problem.

3. OS X 10.9 to 10.14: two drivers, uploads fail or the port flaps. SparkFun’s install guide states the cause: “With Mac OS 10.9 (Mavericks) and later, Apple has built their own version of the FTDI VCP driver into the operating system”, and an FTDI kext installed by older software fights it. Either unload Apple’s (sudo kextunload -b com.apple.driver.AppleUSBFTDI, SparkFun and AN_134 §7.1) or delete FTDI’s kext (AN_134 §4.2). Keep one.

4. Linux: “Permission denied: ‘/dev/ttyUSB0′”. The Arduino IDE now prints the answer in the error itself, “Hint: Try to add user into dialout or uucp group” (Debian 12 thread, Mar 2025). The Ubuntu 18.04 thread shows the crw-rw---- root dialout listing to look for. Group membership only applies after logging out and in.

5. Ubuntu 22.04: port appears, then disappears. That is brltty claiming 0403:6001 as a braille display; bug 1958224 above. sudo apt update && sudo apt upgrade brltty gets the fixed package, or sudo apt remove brltty if you have no braille hardware. The same bug on a CH340 was not fixed in 22.04, which the CH340 on macOS and Linux page covers.

6. Homebrew: brew install --cask ftdi-vcp-driver is deprecated. The cask still points at the 1.5.0 dmg of June 2022 and was deprecated on 16 May 2026 “because: :unreachable” after FTDI replaced the file with the 1.6.0 zip. Install from FTDI’s page by hand.

FAQ

My adapter uses a custom VID/PID. Which driver? On macOS, Apple’s dext lists only FTDI’s stock IDs, so either install FTDI’s dext or ask Apple: a May 2025 thread shows Apple adding custom IDs to com.apple.DriverKit-AppleUSBFTDI through Feedback Assistant, with the catch that one batch landed only in Sequoia. On Linux, FTDI’s TN-101 and the kernel’s new_id interface bind any ID to ftdi_sio without a rebuild.

Do I need FTDI’s driver for the FT-X series on a Mac? On 10.9 and 10.10 yes: AN_134 says Apple’s driver covered FTDI converters “except the FT-X series”. On current macOS the FT-X enumerates on Apple’s dext; if yours does not, FTDI’s 1.6.0 is the fallback.

Why does my D2XX program on Linux say the device is busy? Because ftdi_sio owns it. AN_220 has you rmmod ftdi_sio first, and the port will come back after a power cycle. libftdi-based tools such as pylibftdi detach and reattach the kernel driver for you.

Related guides

Sources