diff --git a/public/blog/you-dont-need-it/guest.png b/public/blog/you-dont-need-it/guest.png new file mode 100644 index 0000000..592add5 Binary files /dev/null and b/public/blog/you-dont-need-it/guest.png differ diff --git a/public/blog/you-dont-need-it/guest2.png b/public/blog/you-dont-need-it/guest2.png new file mode 100644 index 0000000..d71cdfb Binary files /dev/null and b/public/blog/you-dont-need-it/guest2.png differ diff --git a/public/blog/you-dont-need-it/guest3-long.png b/public/blog/you-dont-need-it/guest3-long.png new file mode 100644 index 0000000..5b118e9 Binary files /dev/null and b/public/blog/you-dont-need-it/guest3-long.png differ diff --git a/public/blog/you-dont-need-it/guest3.png b/public/blog/you-dont-need-it/guest3.png new file mode 100644 index 0000000..c198967 Binary files /dev/null and b/public/blog/you-dont-need-it/guest3.png differ diff --git a/public/blog/you-dont-need-it/guest4.png b/public/blog/you-dont-need-it/guest4.png new file mode 100644 index 0000000..1318645 Binary files /dev/null and b/public/blog/you-dont-need-it/guest4.png differ diff --git a/public/blog/you-dont-need-it/guest5.png b/public/blog/you-dont-need-it/guest5.png new file mode 100644 index 0000000..b8369e9 Binary files /dev/null and b/public/blog/you-dont-need-it/guest5.png differ diff --git a/public/blog/you-dont-need-it/omegalul.png b/public/blog/you-dont-need-it/omegalul.png new file mode 100644 index 0000000..6ef54b6 Binary files /dev/null and b/public/blog/you-dont-need-it/omegalul.png differ diff --git a/public/blog/you-dont-need-it/sponge.jpg b/public/blog/you-dont-need-it/sponge.jpg new file mode 100644 index 0000000..7dfede9 Binary files /dev/null and b/public/blog/you-dont-need-it/sponge.jpg differ diff --git a/src/pages/blog/you-dont-need-it.mdx b/src/pages/blog/you-dont-need-it.mdx new file mode 100644 index 0000000..4ad7343 --- /dev/null +++ b/src/pages/blog/you-dont-need-it.mdx @@ -0,0 +1,212 @@ +--- +layout: "@/layouts/global.astro" +title: You Don't Need It +author: kixelated +description: Do you need to use MoQ? What are we even doing with our lives? +cover: "/blog/you-dont-need-it/sponge.jpg" +date: 2025-12-22 +--- + +# You Don't Need It +MoQ is a neato new live media protocol. +It's backed by a bunch of companies, [some big](https://blog.cloudflare.com/moq/) and [some small](https://www.nanocosmos.net/blog/media-over-quic-moq/). +It's easy to get caught up in the hype: + +- Do you need to adopt it? +- Is it an [existential threat](https://webrtchacks.com/is-everyone-switching-to-moq/)? +- How do you even pronounce it? + +Don't worry, I'll answer most of your hypothetical sockpuppet questions. +For context, I'm the idiot that quit my job to work on MoQ open source. +I'm at the forefront of ~peddling~ promoting this new protocol. +**I'm the most invested person in the world.** + +But I'm obligated to say: **you don't need it**. + +Like everything in life, there might be a better alternative. +You need to take a step back and evaluate the problems that you're trying to solve. + +## Problem Driven Development +You are Bob. +You are a builder. +You build software, hopefully for money, and hopefully to *solve a problem*. + +- You **should use** technologies that **solve problems**: an AI editor. +- You **should try** technologies that **might solve problems**: an AI fridge. +- You **should not use** technologies that **do not solve problems**: an AI toaster. + +The hardest part of the job is figuring out what problems exist and which solutions are worth evaluating. +[My road to MoQ](/blog/distribution-at-twitch) took years of trial and error. + +`guest271314` is wrong about virtually everything, but [one of his turds of wisdom](https://discord.com/channels/1124083992740761730/1124083992740761733/1391116973873828091) has stuck with me: + +
+ ![guest271314](/blog/you-dont-need-it/guest.png) +
base64 for +33% higher bitrate, but nobody can discern the difference
+
+ +He's right unfortunately, but on a technicality. +`guest271314` only has one user and all his media is served via `localhost`. +It doesn't matter how the media is transmitted, the user experience will be identical. + +**Your problems are specific to your product.** +There are no universal solutions. + +## Solution Driven Development +We are creative animals, always striving to resolve problems in new and "interesting" ways. +"Not invented here". +"Rewrite it in Rust". +["DOOM on a pregnancy test"](https://www.cnet.com/culture/programmer-makes-original-doom-playable-on-pregnancy-test/). + +That's why I love programming; it's a puzzle with an infinite number of solutions. +But there are only a finite number of problems to solve, so sometimes we invent new ones. +**Build a solution**, and then **try to find a problem**. + +Virtually every Javascript framework ever created has fallen into this trap. +The entire blockchain industry is built on this principle. +Don't get me started about AI. +Unfortunately, I think the [IETF working group](https://datatracker.ietf.org/wg/moq/about/) has also fallen into this trap. + +My go-to example is `FETCH`, a *mandatory to implement* verb in [moq-transport](https://www.ietf.org/archive/id/draft-ietf-moq-transport-15.html#name-fetch). +It's trying to reinvent HTTP, but without solving any of the problems with HTTP. +Without diving into the details, **it's a huge waste of time**. + +
+ ![guest271314](/blog/you-dont-need-it/sponge.jpg) +
the urge to reinvent the wheel
+
+ +**Just use HTTP**. +You don't need MoQ for your VOD content. +It's not solving a problem, it's only creating a solution. + +## Production Driven Development +In a [previous blog post](/blog/application-first), I ranted about how critical it is to focus on the application. + +I think you should always **have a production plan**, even for a prototype. +It makes our monkey brains think about the boring problems that *still need to be solved*. +Stuff like authentication, backwards compatibility, and other stuff that nobody has fun thinking about. + +Of course, you can always live a hermit lifestyle like `guest271314`. +**Programming should be fun.** +Your code never needs to leave `localhost`. +Just don't spam the MoQ discord pretending to be an expert. + +
+ ![guest271314](/blog/you-dont-need-it/guest2.png) +
It takes a special someone to [get banned](https://github.com/guest271314/banned/issues) from MDN, bugs.chromium.org, etc.
+
+ + +## You Should Not Use This +Enough philosophizing, let's get to the point. + +**You *should not* use MoQ for high-quality content**. + +Wow I bet you didn't expect something so blunt. +There's a lot of nuance of course. + +## TCP vs QUIC + +Unequivocally, TCP is the best protocol for **reliable** delivery over the internet. +It has universal adoption and has been hyper-optimized for decades. +There are massive CDN companies eager to charge you pennies to serve your funny cat videos over HTTP. + +The problem with TCP, of course, is that its reliability comes at the expense of latency. +Specifically, TCP will queue data during network congestion. +QUIC (and UDP in general) give you the ability to **sacrifice reliability**, opting to skip data instead. + +And that's all it provides. +QUIC can't move more bytes, or move them faster. +Your 100MB cat video will take just as long to download over QUIC as it does over TCP. + +So if you're delivering "high-quality content", you have to ask yourself: +- Do you want to sacrifice quality for latency? +- Do you want viewers to skip chunks of the sportsball game? +- Can viewers even discern the difference between 200 milliseconds or 5 seconds of latency? + +If the answer is **NO**, then you **should not use MoQ**. +You should instead use HTTP or maybe even WebSockets (for 1:1 stuff). + +
+ ![guest271314](/blog/you-dont-need-it/guest4.png) +
It's a running gag at this point
+
+ +## But What About "Maybe"? +Here's the promised nuance. +One of the selling points of MoQ is the flexibility. +The same protocol can serve a variety of different use-cases. + +For example, I initially built [MoQ for Twitch](/blog/distribution-at-twitch). +In theory it falls under the "high-quality content" category above, even though most of the content consists of loading screens and bathroom breaks. + +Twitch chat is why MoQ exists. +OMEGALUL +
+ ![omegalul](/blog/you-dont-need-it/omegalul.png) +
I've been told that this is fun to spam in chat.
+
+ +Some users want to have a real-time chat with their favorite streamer. +**Some users want to sacrifice quality for latency**. + +Our first attempt used WebRTC. +For the highly engaged users, this was great product. +They don't care if some video is skipped, they're too busy typing OMEGALUL in chat. + +But most users don't want their live stream served via Google Meet. +The quality of the broadcast is worse for no discernible reason. +Some people just want to watch TV in their underwear. + +So you, roleplaying as Bob the Builder, need to decide what to build: +- two separate stacks, one for HLS and one for WebRTC? +- or a single MoQ stack and let **viewers choose their experience**? + +There's no right answer. +I chose the latter and look where I ended up. + +
+ ![guest271314](/blog/you-dont-need-it/guest5.png) +
At least I think I'm funny.
+
+ +## What about my Use-Case? +Unless you work for a [Twitch clone](https://kick.com/), your use-case will be different. +I can't pretend to understand what you're building, but that's not going to stop me from giving unsolicited advice. + +**Live Sports**: +Use HLS/DASH for mass distribution. +Consider MoQ when *some* users want 1s latency for gambling or interactivity. + +**Conferencing**: +Use WebRTC if you want a [Google Meet clone](/blog/replacing-webrtc). +Consider MoQ when you want to do [dumb custom shit](/blog/first-app). + +**Production Studio**: +Use SRT because that's what your expensive hardware supports. +Consider MoQ when you need to save bandwidth. + +**AI Voice Chat**: +Use WebSockets and WebCodecs. +Please don't use WebRTC, otherwise you'll spend so much money/time running the model, only to drop the output. +Consider MoQ when models get much faster. + + +Look you get the idea. +You can and should use whatever protocol best solves your problems. +**You don't need to use MoQ just because it's new and cool.** + +(but I don't blame you) + +## FIN +[Join the Discord](https://discord.gg/FCYF3p99mr) already and help me troll `guest271314`. +Just make sure to read the `#rules` first. + +
+ ![guest271314](/blog/you-dont-need-it/guest3-long.png) +
+ + +Written by [@kixelated](https://github.com/kixelated). +![@kixelated](/blog/avatar.png)