Slack client alternative
#Slack client alternative code#
Each of these clients is a mostly-separate codebase, with its own features, bugs, roadmap, code idioms, experts in the codebase, and gotchas. Some people also connect over XMPP or IRC using gateways that we operate on behalf of the team, and these gateways behave, for all intents and purposes, as alternative ‘clients’ that also happen to be servers for other protocols.
#Slack client alternative for mac#
People use Slack from the web, from desktop clients for Mac OS, Windows, and Linux, and from native mobile clients for iOS, Android, and Windows Mobile. We at Slack find ourselves wrangling a vast and growing body of native client code. We’re creating and deploying an edge cache built around libslack. The goals of a good Slack client have significant overlap with the goals for a Slack-aware cache in our edge points-of-presence. By providing native language-level types for objects like users, messages, channels, and teams, instead of least-common-denominator JSON, we can avoid some classes of bugs caused by dynamic typing. It’s easier to debug and tune one piece of code than N. With the caveat that libslack is still a work-in-progress, we are expecting to reap the following benefits: We’ve done it a few times over now, and are boiling the lessons down into a modest-sized native library called libslack.
Writing a high-quality Slack client is tricky. We need to be discriminating about how we use the finite resource of storage. Teams contain too much data to leave all of it on members’ phones. This information needs to be be evicted or updated in the client when it changes. Slack clients statefully cache some information. How can we maintain as much utility as possible in degraded conditions, and exploit good conditions when available? Connections come and go, and vary in their quality and network affinities, even in the middle of sessions. Mobile inherently means unpredictable network conditions. How can we hide this latency? Avoid round-trips? Piggy-back predictable sequels on existing round-trips? Use our more limited edge presence wisely? Many people have a slow round-trip time to our data centers. Slack engineers working on the client-side have rummaged around in the systems toolbox to handle problems like: Since Slack clients run on physical devices, this is impossible, so we must make do.
Your Slack client strives to be a consistent, compact, zero latency, searchable replica of all of the files, messages, custom emojis, voice calls, bots, sound effects, etc. The constraints of physical reality make these hopes impossible to realize in every case, but astonishingly many of the common cases can be handled well. Your garbage collector and your kernel’s virtual memory subsystem both strive, in very different ways, to provide the illusion of infinite, fast, volatile memory. Your file system wants to give you infinite, fast, durable storage. Systems problems are rooted in impossible dreams.