On the arduino homepage it says about Communication using the ArduinoMega256
The Arduino Mega2560 has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers. The ATmega2560 provides four hardware UARTs for TTL (5V) serial communication. An ATmega16U2 (ATmega 8U2 on the revision 1 and revision 2 boards) on the board channels one of these over USB and provides a virtual com port to software on the computer (Windows machines will need a .inf file, but OSX and Linux machines will recognize the board as a COM port automatically. The Arduino software includes a serial monitor which allows simple textual data to be sent to and from the board. The RX and TX LEDs on the board will flash when data is being transmitted via the ATmega8U2/ATmega16U2 chip and USB connection to the computer (but not for serial communication on pins 0 and 1). A SoftwareSerial library allows for serial communication on any of the Mega2560's digital pins. The ATmega2560 also supports TWI and SPI communication. The Arduino software includes a Wire library to simplify use of the TWI bus; see the documentation for details. For SPI communication, use the SPI library.
So there is a second chip ATmega16U2 on the board which channels RX0/TX0 to a COM port via usb to my computer. So one wire is for receiving and one for sending to the COM port. So any software I write or which as been written for the Arduino talks over this COM port at a certain Baud rate and this is the only way Arduino and a computer can interact via usb. Is this correct?
Consequently, if I want to connect my arduino to a certain software with a known interface I must program a connecting puzzle piece between the COM port and said interface?