Hi,
I've made a native CAN to USB device for Linux. It supports both CiA DS102-2 type cables as well as the US style OBDII to DB9 cable. You can also set a termination resistor using a DIP switch. The reason I made this is because I wanted to analyze my car's CAN bus. In general I found slow hardware, mostly ELM327 based devices and mediocre software. I discovered that Linux has native CAN support via SocketCAN. This is great because it lets you treat a CAN interface like any other network interface. You can easily write your own programs using sockets. Multiple programs can simultaneously send/read data from the network. It's optimized for performance by using a binary protocol instead of the ASCII based protocol like ELM327 or Lawicel. In addition, the can-utils package offers clean and easy to use tools. For example "cansend can0 "123#010203" to send a message and "candump can0" to monitor messages. Most devices with native support Kvaser, Peak, EMS were too expensive for me. I just wanted an affordable device to work seamlessly with Linux's SocketCAN.
If you're interested, you can find more info here:
https://kkuchera.github.io/canalyze/. It's completely open source and you can make one using open source tools. You can find the hardware and firmware on github (see below). If you have any questions, remarks or if there's an improvement I haven't thought of, feel free to let me know!
hardware:
https://github.com/kkuchera/canalyze-hw/firmware:
https://github.com/kkuchera/canalyze-fw/