From FTDI programming manual:
"For Linux, Mac OS X (10.4 and later) and Windows CE (4.2 and later) the D2XX driver and VCP driver are
mutually exclusive options as only one driver type may be installed at a given time for a given device ID.
In the case of a Windows system running the CDM driver, applications may use either the D2XX or VCP
interface without installing a different driver but may not use both interfaces at the same time."
I was going to talk about Linux, and this statement is not as easy to understand as it looks.
I have some experience with FTDI devices on Linux, and there is actually no specific driver for them. Not in the true sense. FTDI parts are accessed through libusb on Linux.
The Linux "driver" provided by FTDI is actually just a user-mode library giving D2XX functionality to applications using itself libusb to access the device. This is not really a driver per se.
Then, the equivalent of "VCP" on Linux is also built in the Linux kernel. There's nothing to do or to install for this. You plug the device, and virtual serial port(s) are created. You don't need any software from FTDI for serial port-only functionality. As to the equivalent of D2XX access, there is an open-source alternative called libftdi. It has a slightly different API, but basically gives the same functionality - although I don't know how much of MPSSE it provides.
The headache is that, on Linux, the EEPROM configuration for drivers is IGNORED (as opposed to Windows). So by default, any FTDI device will be enumerated on Linux as a USB serial device.
AND, yes, once they are tied to serial ports, you cannot use the D2XX access (which is the only way to get access to any other mode than UART). Which is really annoying. The solution is to add a udev rule to automatically detach the device from the created serial port(s) so you can use D2XX on it. If the device has an EEPROM with a specific USB VID/PID, then it's annoying, but just requires this specific rule. If the device OTOH has the standard FTDI VID/PID, then it becomes intractable: if you add such a rule, it will apply to ANY device with the default VID/PID. Which may not be what you want.
AFAIK, the same applies to MacOS, as last time I checked, it was also based on libusb on it.
On Windows, the driver selection in EEPROM is used, and thus you can choose which will be loaded, even per channel!
So on Linux(/MacOS), the only solution if you want D2XX access, and not infuriate your customers by blocking all other devices they might use that are FTDI-based with the default IDs, is to program your own VID/PID. Assuming you have a VID. Which is costly. A free option is that FTDI can give you a few dedicated PIDs, and you can still use FTDI's VID. A few years ago, that was a free service, and I made the query. I got 8 dedicated PIDs. But given the scarcity of PIDs (they are only on 16 bits!), I don't know if FTDI still provides this service.