XMMS follows a client/server architecture, though both might be running transparently on the same host.
The server, written in C, manages the media library, playlists, metadata importing and audio playback (pretty much all audio formats known to machines are available, with a focus on high fidelity).
To control the server locally or remotely, there exists a plethora of clients, from command-line tools to advanced graphical interfaces (with all flavours of toolkits and OSes). Clients can be written in C, C++, Python, Ruby, Perl or Java, thanks to library bindings.
One particularly cool feature of XMMS2 is its rich media library, which is currently being upgraded to the home-grown and very high-performance S4 backend. To query the media library, clients use the powerful abstraction provided by Collections, a concept I initially developed as part of my Google Summer of Code in 2006 and which is undergoing a major refactoring/upgrade, also known as Collections 2.0.