Cross Platform thoughts through the lense of Banshee

Banshee running on OS X 10.5
Banshee 1.3.2 on Mac OS X 10.5

A huge amount of thanks goes to Eoin Hennessy for all of his efforts to bring Banshee to the Mac. Eoin singlehandedly fixed cross platform bugs in our core, worked out some kinks in the build, and implemented a Mac OS X platform backend to provide tight integration with the OS (i.e. the menu bar).

So how do I get it?

On Friday we will release Banshee 1.3.3, the last preview/developer release before we officially bless 1.4 as the new stable series in a couple of weeks.

As Miguel mentioned, we will be releasing for the Mac from here on. That means that along side our source code tarballs, RPMs for openSUSE, and packages published through other distributions, we will have a .dmg available to download.

If you are courageous, you can try to build Banshee on OS X today. However, our trunk does not yet run. Eoin has done all of his work in github, and while this branch runs, it’s slightly outdated, and does not use the new build environment I wrote this weekend.

Eoin is in the process of extracting patches that we will merge this week into trunk. These patches include the fixes to core, and the OS X integration.

Banshee running on OS X 10.5
More bling, before I ramble on about technical things and get teary-eyed and nostalgic

How does this cross platform stuff work?

Banshee is designed in a very modular way. We have a fairly small core, which is completely platform agnostic. It uses only ECMA/OSP .NET APIs and APIs of libraries which are themselves cross platform and open source (Mono.Addins, NDesk.DBus, Cairo, GTK, etc).

Additionally, all real features are designed as extensions: the Play Queue, video playback, the notification area, Last.FM, and so on. This means that we can easily pick and choose features by adding or removing assemblies from a package.

Finally, anything requiring a platform specific implementation is abstracted into an agnostic factory/interface, and implementations are loaded as extensions.

Cross platform frameworks give you the 90%, but it’s really the 10% that matters

It’s virtually impossible to write a cross platform application that does not suck if you just stick to what a single framework provides. By this I mean if we used only features in .NET or if a Java application used only features in the Java framework, the user experience would feel isolated and sandboxed.

  • In GNOME this means using GConf to store settings and working with DBus services like GNOME Settings Daemon. We interact with the screensaver, we support multimedia keys, integrate with Brasero for CD burning, and so on.

  • In the general UNIX world (Linux and BSD/OS X), we have a POSIX IO backend that performs much better than the System.IO .NET backend.

  • In Linux we have the HAL hardware backend (which I like to think of as HALAL, but don’t read too far into that).

  • On OS X we integrate with the dock and the system menu bar.

Okay, but what about Windows?

Ah, right. Windows. There’s one tiny little drawback to making a media player written in C# cross platform. Namely, we require GStreamer on all three platforms, and in turn we have a small library, libbanshee, written in C. Of course this pain is more than eased by the incredible power and functionality that GStreamer offers.

The truth is, I know next to nothing about Windows, and I find it incredibly frustrating to work in that environment. I am getting close however to getting a build of libbanshee on Windows. With this piece in place, we’ll be able to release on WIndows.

Currently the goal is that we’ll always distribute libbanshee as a binary on Windows, but the rest of Banshee can be built using “F5″ in Visual Studio. This will be very interesting as it opens up Banshee to a whole new world of contributors.

Google Chrome has seen an incredible amount of contribution from external contributors simply because the source can be downloaded, opened with Visual Studio, and compiled. Users can tweak some code, and immediately see the results. This is where we want to be – Linux, Mac, and Windows.

The End Result

What is important with all of this cross platform work is simple: infiltrate the proprietary platforms, attract users and developers to free software, and grow the open source ecosystem. Ultimately, we’d like to think this will help Linux adoption. Applications are the key, not the platforms.

Banshee on Mac OS X is symbolic to me. It marks a period in our project where we step out of the realm of our comfortable and lovable GNOME community and into different communities, creating and bridging through the shared goal of open and free software. Users unite!

Finally, I’d again like to thank Eoin for his great efforts with our code, Imendio for their great work on GTK for OS X, the Mono team for the solid 2.0 release, and the GStreamer community for the best multimedia framework an application developer could ask for.

This entry was posted in uncategorized and tagged , , , , , . Bookmark the permalink.

23 Responses to Cross Platform thoughts through the lense of Banshee

  1. Isak Savo says:

    And thank you for delivering what is probably the best music player out there (all platforms included).. I have tried most of them and most of them suck. Banshee is not perfect but damnit it does get the job done with the least amout of annoyances. And, in direct contrast to other (mostly proprietary) players out there, it gets BETTER and more AWESOME with every release!

    At this pace, I bet we’ll see total awesomeness any time now! :-)

    Thanks!

  2. Michael says:

    Awesome as always :)

  3. @Isak and @Michael: thanks so much for the kind words and encouragement. It’s users like you that fuel our development!

  4. Jason says:

    Wow — looks really good from the screenshots!

  5. xyz says:

    congrats!

    now we can start a countdown until trolls come and start complaining that you’re hurting linux with portable software ;)

  6. That is absolutely amazing, Aaron. Thanks for being the showcase app for Tango :) Some updates to our website is due.

  7. ethana2 says:

    Yeah, it seems a lot of people forget to be nice in comments they leave. Like on dellideastorm, they appear to get angry at Dell for not offering Ubuntu on system x or system y, and I always try to come in and kind of apologize for them and remind everyone that Dell should be praised for what they’ve done, not attacked for what they haven’t.

    I test amarok daily builds with their apt, project neon.. Is there anything like this for banshee? I can never succeed at compiling and i think it’s a waste of time, but i love to report bugs and provide other feedback sometimes.

  8. Ian McKellar says:

    Looks great! Good to see cross-platform GStreamer being adopted.

    Are you able to use the Gtk+ Mac menu integration or did something have to be written specially? Are there any plans to use the native cocoa engine? (http://svn.gnome.org/svn/gtk-quartz-engine/)

    And also, what’s the state of device support for you guys? Does the libmtp & ipod stuff transfer across pretty easily?

  9. @Ian: Duder! At least building on the Mac is familiar to some extent. I still am trying to wrap my head around Windows. Not sure if I’m going to go with a full native Windows build or xcompile. Both have given me equal trouble.

    There’s a library that allows us to basically proxy our GtkMenuBar to OS X. I haven’t done any of that work though – it’s all on Eoin. And yeah, I’ve been keeping an eye on the native theme engine, but it’s really just not ready. After I finish solidifying our build environment and we get the app up to par on OS X (at least in terms of stability), I would like to donate some cycles to improving that engine. For now poor imitation through Clearlooks will have to do.

    As for devices… we’re so not even there right now :-) Step one is getting a working core release out. We’ll have to implement OS X specific hardware support, and once that’s done hopefully we can benefit from things like libmtp. I expect our iPod stack to work just fine since it’s all managed code. All it really requires is a mounted volume and access to SCSI code pages.

    Core hardware layer: http://svn.gnome.org/svn/banshee/trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/
    Linux/HAL implementation: http://svn.gnome.org/svn/banshee/trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/

    We’ll need to write an OS X implementation for the above interfaces, and then some other small stubs for iPod support. (http://svn.gnome.org/svn/banshee/trunk/banshee/src/Dap/Banshee.Dap.Ipod/Banshee.Dap.Ipod/PodSleuthDeviceProvider.cs)

    CHEERS!

  10. eoin says:

    @Ian: We’re using Imedio’s ige-mac-integration library with some C# bindings I put together (http://github.com/eoin/ige-mac-integration-sharp). It makes integrating Gtk+ apps with OSX alot easier. I’ve tried running Banshee with gtk-quartz-engine but it’s not quite useable yet. I’d like to spend some time on it.

  11. Aaron Strontsman says:

    “What is important with all of this cross platform work is simple: infiltrate the proprietary platforms, attract users and developers to free software, and grow the open source ecosystem. Ultimately, we’d like to think this will help Linux adoption. Applications are the key, not the platforms.”
    Yeah, you’d like to think that, but ultimately after finally switching to Linux I discovered that most software I already knew from windows (Firefox being only one example) works less well / equally well on Linux, but in no case did anything really work better (okay, I admit, the GTK+ file chooser actually is better integrated with the system under Gnome). The reasons to stick with it for now, is the software that actually isn’t ported (e.g., Epiphany) and a combination of laziness (repartitioning does take time) and determination (to stay on Linux after you went there).
    By the way: despite some apparent bugs in 1.2.1 I do like polished Banshee more than dull Rhythmbox.

  12. Gabriel says:

    @ethana2: See the note about unstable releases at the bottom of http://banshee-project.org/download/development/

  13. Matthew says:

    Looks nice, cant wait for the new Banshee!

  14. Anthony says:

    I am currently an avid OS X user, and yet cannot leave Linux alone. Thank you for bringing something to my Mac that lets me listen to my music, without having a “GENIUS,” there to help me buy more music. Thank you for giving me a player that will play any format someone is willing to write an open codec for.

    And Finally, thanks for allowing me to help the open-source cause on a rather closed platform.

    I would really like to get involved in this project, whether it be testing (I have both PowerPC and Intel macs at home), or in any other way you guys need. Although I know very little regarding code, if there is anything you all need, don’t hesitate to let me know.

    Thanks,
    Anthony

  15. pferrill says:

    Any idea if Banshee will work on the Nokia N810? I know there was a previous deb of Mono but not sure where it stands at the moment.

  16. Mike B says:

    I can’t seem to find a way to get the Mac version. The Banshee web site and blog are not updated, Aaron it seems your personal blog has the most current info about Banshee. Any advice on grabbing the Mac version to try out?

  17. flo says:

    Thanks for all your hard work, i too hope that in the end everyone will benefit from more cross platfom projects.
    @anthony if you are reffering to the genius bar, you know you can turn that off completly, and it doesn’t even turn itself on by default, right? I’m all for criticism, but at least criticise actual flaws, not something you just don’t know how to get rid off.

  18. Mark Duncan says:

    Keep up the great work Aaron! Banshee is SO much better than Rhythmbox. I didn’t know a Mac version was available. I’ll have to give it a try when I get off work.

  19. Pingback: Aaron Bockover » Banshee 1.4 hits the streets, packed with Awesome

  20. Hey Aaron, Thx for buiding such a great tool….

    I just read your entry and I then browsed to another website called GSTREAMER
    because I couldn’t believe that there were absolutly nothing about Windows and this
    great framework, and I didn’t fail. Here you can see some real important binaries for
    GSTREAMER on Windows. Perhaps it is useful for your development….

    http://gstreamer.freedesktop.org/pkg/windows/releases/
    The more apps are usable within different os the more understanding between all fractions (like MSFT APPL and others will exist. We’re running into a blended os future)

  21. Looking forward to use Banshee on Windows .. but seems to be far away :-(

  22. wyrfel says:

    Hei Aaron,

    first of all, thanks for the best and sexiest media player for Linux and hopefully soon to be best opensource media player for Windows.

    Which brings me to the topic…are you aware of that the songbird devs claim to be using GStreamer under Windows (Wikipedia lists it as Win compatible as well)? Your article leaves the impression that GStreamer would still have to be ported?

    On a sidenote…i like both Songbird and Banshee, but momentarily Songbird has a lot of issues still, that i don’t believe they’ll manage to fix till 1.2 or 1.3.
    It would be too great if Banshee would be available for Win way before that.

    Best regards,
    Andre.

  23. Boersnoes says:

    @Aaron: Today I downloaded the archive and gitted it.
    Upon opening the .sln (updating it to vs2008 format) most of the projects have broken references. Mainly PosixHelper, GTK-sharp & gnome-sharp are missing in most projects. There’s more, but I’m doing it step by step.

    In the Mono-2.4.2.1/bin folder there seems to be a posixhelper.dll, but it appears not to be a valid dll. Any tips to get me going?

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>