USB is one of the most popular interfaces in both PCs and mobile devices. Linux kernel supports both host and device side of USB protocol. Thousands of people use it every day but have no idea how it works and what are the consequences of its design. In this talk Krzysztof will try to discuss practical aspects of USB protocol and its implementation in Linux. First part is a brief introduction to USB protocol. Then Krzysztof will try to explain basics of USB host implementation. He will try to answer questions like: "How new devices are being discovered?", "How drivers are selected?", "Why badUSB attack works so good?". The final step is going to be a short introduction to device side implementation. "What is needed to build my own USB device?", "What is the easiest way to do this in Linux without writing kernel code?", all these questions should fit here along with suitable demos. About Krzysztof Opasiak Krzysztof graduated with distinction from Warsaw University of Technology, Warsaw, Poland in February 2014. Since 2012 connected with Samsung R&D Institute Poland. Since march 2013 involved in USB related works in Tizen OS. Maintainer of libusbgx - library for USB gadgets management through ConfigFS. Speaker on ELCE 2014 & 2015, Next Generation Security Conference 2015, FOSDEM 2016 and a few others.