It's worth mentioning that Zulip (https://zulip.org/) is a new open source option that has basically all the features IRC/Slack does. So using open source tools for open source development doesn't have to mean dealing with IRC's limitations.
(I'm one of the Zulip maintainers; happy to answer any questions about it).
I've been meaning to give Zulip a try. How many users can it handle?
Less importantly:
What would you say its biggest missing feature is vs Slack? And conversely what does it bring to the table that Slack can't touch yet?
I'll field the latter. I've used both Zulip and Slack in small team (5-20 people) settings and I much prefer Zulip.
In particular I like how the zulip UI is single-stream by default. Messages from different channels are interleaved, so you can read all new messages at a glance, but still well separated by visual elements including color - I don't find it confusing. And I can focus down to any particular channel , or reply to that channel, in one click.
It goes all-in on this "many streams, one view" model with the concept of topics - lightweight "subject headers" for individual sub-streams of a channel. This neatly avoids the "two conversations at once" problems that can occur in other systems occasionally.
Some more minor points are a wider range of markup available than slack (including syntax highlighting for code), and better support for short-lived private groups (ie. "a PM between Alice, Bob and Charlie")
As to what I think Slack does better: More one-click integrations (and likely other backend admin stuff that I don't see as a simple user). AFAIK Zulip doesn't have an irc gateway. Also when I last used it (over a year ago) Zulip's mobile client was quite poor.
I'm sure others can come up with more differences - to be honest I tend to treat slack as "slightly smarter irc" so I don't pay attention to all the bells and whistles.
Finally I should caveat that these same features I like are things people dislike about Zulip - it's more dissimilar to existing solutions and people will always have their preferred ways of doing things. I personally find Zulip amazing for me.
FWIW Zulip does have a beta-quality IRC gateway (bots/irc-mirror.py); anyone interested in working on improving that should check out this issue: https://github.com/zulip/zulip/issues/249
I especially like the concept of topics in zulip. It helps maintain different subjects in a given channel, which is way more readable imo. I'm a big fan.
Other answers address the big user experience advantages (e.g. threading) that it has over Slack, but there's a bunch of smaller features we have that I don't think Slack does (e.g. you can configure regular expressions to automatically linkify patterns like T123 to link to your bug/ticket tracker).
In terms of features Slack has that Zulip doesn't, I think the biggest ones are features that Zulip has today on zulip.com (which isn't taking new users) but you can't easily setup for your own Zulip server (e.g. the Android app doesn't support talking to a custom server without patching it yourself, mobile push notifications aren't available with your own server, etc.). Contributions on those things are welcome -- they're all relatively easy problems for someone with some mobile experience.
In terms of features that aren't just missing configuration in the run-your-own-server model, I'd say the biggest one is that Slack has a really slick onboarding experience and it has more slick integrations. It's hard to compete on onboarding with a company with like a hundred engineers, but I don't see the integrations piece as being a long-term advantage for Slack -- they're easy to write and I expect the open source community to produce a lot of them for Zulip over time.
IMO, push notifications for mobile applications is a big hole. It's not an easy problem to solve, but as of right now I believe you have to release your own flavor of the mobile applications for this to work.
I'm excited about Zulip as a Slack-style tool, especially for teams. (Separate from the discussion of whether FOSS project collaboration should be Slackish or IRCish.)
Are there any plans to support multiple teams / multiple servers from the native client? This is a particularly acute pain point on mobile; I'm reluctant to promote any tool that requires me to be logged in to only one project's instance of the tool at a time, because if it works well, it gets adopted for other projects, and then I'm having to juggle clients. I am unfortunately on two projects that use HipChat, and even there it's a huge pain that I can't be logged in to both simultaneously on my phone. (Some of their desktop apps finally support multiteam which is a huge help, but I still have to pick just one to participate in on mobile..)
Slack isn't perfect, but at least all the native clients will let me be logged in to 5 teams at the same time. (And no, opening multiple browser tabs is not an appropriate solution - it doesn't work at all on iOS, for example.) And obviously, this is something IRC does a great job of as well.
That isn't currently supported since it wasn't super important before Zulip was open sourced a month ago, but I definitely consider it one of the major problems that need work for both the desktop and mobile apps.
First, let me say that I'm really happy zulip was opened up, and grateful for you and your team to support it.
But does Zulip support server federation? Obviously slack doesn't allow self-host, so if slack is the alternative, that doesn't really make much of a difference. But that is one feature that http://matrix.org/does support.
Ping me over email (tabbott@mit.edu) and we can discuss; I'd definitely like to add a federation story. Haven't looked at Matrix's technical approach before...
(I'm one of the Zulip maintainers; happy to answer any questions about it).