Non-Linux kernels can use the RtAudio output plugin for OSS audio.
This should let the client work on FreeBSD or Debian kfreebsd-*
--- a/LastFM.pro
+++ b/LastFM.pro
@@ -37,13 +37,19 @@
     SUBDIRS -= src/mediadevices/ipod
 }
 
-linux* {
+unix:!mac* {
     SUBDIRS -= src/Twiddly \
                src/libFingerprint/fplib/pro_qmake/fplib.pro \
                src/libFingerprint/ \
                src/Bootstrapper/ITunesDevice
+    SUBDIRS += src/output/RtAudio
 
-    SUBDIRS += src/output/alsa-playback
+    UNAME = $$system(uname -s)
+
+    contains ( UNAME, [Ll]inux ) {
+        SUBDIRS -= src/output/RtAudio
+        SUBDIRS += src/output/alsa-playback
+    }
 }
 
 
--- a/src/AudioController.cpp
+++ b/src/AudioController.cpp
@@ -173,8 +173,10 @@
 
     #ifdef WIN32
         m_output = qobject_cast<OutputInterface*>( loadPlugin( "rtaudioplayback" ) );
-    #elif defined LINUX
+    #elif defined REALLY_LINUX
         m_output = qobject_cast<OutputInterface*>( loadPlugin( "output_alsa" ) );
+    #elif defined LINUX
+        m_output = qobject_cast<OutputInterface*>( loadPlugin( "rtaudioplayback" ) );
     #else
         m_output = qobject_cast<OutputInterface*>( loadPlugin( "output_portaudio" ) );
     #endif
--- a/src/libUnicorn/unicorn.pro.inc
+++ b/src/libUnicorn/unicorn.pro.inc
@@ -36,7 +36,7 @@
 		CONFIG -= ppc
 	}
 
-    linux* {
+    unix:!mac* {
         QMAKE_CXXFLAGS_DEBUG = -ggdb
     }
     
@@ -127,10 +127,15 @@
     }
 }
 
-linux* {
+unix:!mac {
     DEFINES += LINUX
 }
 
+UNAME = $$system(uname -s)
+contains( UNAME, [Ll]inux ) {
+    DEFINES += REALLY_LINUX
+}
+
 mac {
 	DEFINES += MACOSX
 }
--- a/src/mediadevices/ipod/ipod.pro
+++ b/src/mediadevices/ipod/ipod.pro
@@ -12,7 +12,8 @@
 linux* {
     LIBS += -lgpod
 
-    INCLUDEPATH += /usr/include/gpod-1.0 /usr/include/glib-2.0 /usr/lib/glib-2.0/include /usr/lib64/glib-2.0/include
+    INCLUDEPATH += /usr/include/gpod-1.0 /usr/include/glib-2.0 /usr/lib/glib-2.0/include /usr/lib64/glib-2.0/include \
+                   /usr/local/include/gpod-1.0 /usr/local/include/glib-2.0
 }
 
 mac* {
--- a/src/output/RtAudio/RtAudio.pro
+++ b/src/output/RtAudio/RtAudio.pro
@@ -8,10 +8,6 @@
 HEADERS = rtaudioplayback.h
 SOURCES = rtaudioplayback.cpp rtaudio/RtAudio.cpp
 
-unix:!mac {
-    LIBS += -lasound
-}
-
 win32 {
    LIBS += -lwinmm -Ldsound -ldsound -lole32 -lgdi32 -luser32
    INCLUDEPATH += dsound
--- a/src/output/RtAudio/rtaudio/RtAudio.cpp
+++ b/src/output/RtAudio/rtaudio/RtAudio.cpp
@@ -42,7 +42,7 @@
 #include <QtGlobal>
 
 #ifdef Q_WS_X11
-    #define __LINUX_ALSA__
+    #define __LINUX_OSS__
 #endif
 #ifdef Q_WS_FREEBSD
     #define __LINUX_OSS__
@@ -57,6 +57,8 @@
 #include "RtAudio.h"
 #include <iostream>
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 
 // Static variable definitions.
 const unsigned int RtApi::MAX_SAMPLE_RATES = 14;
@@ -625,7 +627,7 @@
 
     if (fd >= 0) close(fd);
     device.name.erase();
-    device.name.append( (const char *)device_name, strlen(device_name)+1);
+    device.name.append( (const char *)device_name, strlen(device_name) );
     devices_.push_back(device);
     nDevices_++;
   }
--- a/src/output/RtAudio/rtaudioplayback.cpp
+++ b/src/output/RtAudio/rtaudioplayback.cpp
@@ -158,7 +158,7 @@
     #endif
 
     #ifdef Q_WS_X11
-        l << "Alsa";
+        l << "OSS";
     #endif
 
     #ifdef Q_WS_MAC
@@ -174,6 +174,7 @@
 {
     QStringList l;
 
+    initAudio( 44100, 2 );
     if ( !m_audio )
         return l;
 
@@ -201,6 +202,8 @@
         LOGL( 1, "Getting device names failed. RtAudio error type: " << error.getType() <<
                  " Message: " << error.getMessage() );
     }
+    delete m_audio;
+    m_audio = 0;
 
     return l;
 }
@@ -209,6 +212,13 @@
 void
 RtAudioPlayback::startPlayback()
 {
+    if ( m_audio )
+    {
+        delete m_audio;
+        m_audio = 0;
+    }
+    initAudio( 44100, 2 );
+
     if ( !m_audio )
     {
         emit error( Radio_NoSoundcard, tr( "Your soundcard is either busy or not present. "
@@ -242,6 +252,9 @@
     m_audio->stopStream();
     m_audio->cancelStreamCallback();
 
+    delete m_audio;
+    m_audio = 0;
+
     m_mutex.lock();
     m_buffer.clear();
     m_mutex.unlock();
@@ -284,13 +297,14 @@
         int card = internalSoundCardID( m_deviceNum );
 
         #ifdef Q_WS_X11
-        api = RtAudio::LINUX_ALSA;
+        api = RtAudio::LINUX_OSS;
         #endif
 
         RtAudioDeviceInfo info = m_audio->getDeviceInfo( card );
         delete m_audio;
 
-        if ( info.nativeFormats & RTAUDIO_SINT32 )
+        // See Debian bug report #373239
+        /*if ( info.nativeFormats & RTAUDIO_SINT32 )
         {
             format = RTAUDIO_SINT32;
         }
@@ -301,7 +315,7 @@
         if ( info.nativeFormats & RTAUDIO_SINT16 )
         {
             format = RTAUDIO_SINT16;
-        }
+        }*/
 
         m_audio = new RtAudio( card, channels, 0, 0, format, sampleRate, &bufferSize, nBuffers, api );
     }
--- a/src/output/RtAudio/rtaudioplayback.h
+++ b/src/output/RtAudio/rtaudioplayback.h
@@ -53,7 +53,7 @@
 
         QStringList soundSystems();
         QStringList devices();
-        void setDevice( int n ) { m_deviceNum = n; initAudio( 44100, 2 ); }
+        void setDevice( int n ) { m_deviceNum = n; /*initAudio( 44100, 2 );*/ }
     
 
         int audioCallback( char *buffer, int bufferSize );
