WEBVTT

00:00:00.000 --> 00:00:02.299
Every single second, your devices are generating

00:00:02.299 --> 00:00:06.740
just thousands of hidden errors. Oh, yeah. Background

00:00:06.740 --> 00:00:09.580
logs, diagnostic warnings, all of it. Right.

00:00:09.720 --> 00:00:13.099
And if your laptop or your smartphone actually

00:00:13.099 --> 00:00:15.740
tried to save all of that digital exhaust, your

00:00:15.740 --> 00:00:17.719
hard drive would completely fill up. I mean,

00:00:17.839 --> 00:00:19.559
the entire system would crash in a matter of

00:00:19.559 --> 00:00:22.219
hours. Exactly. So how does it survive? How do

00:00:22.219 --> 00:00:25.500
these wildly complex machines keep from just

00:00:25.500 --> 00:00:27.899
suffocating on their own output? It's actually

00:00:27.899 --> 00:00:30.500
a really elegant solution. It is. They survive

00:00:30.500 --> 00:00:33.820
by relying on one of the most brilliant foundational

00:00:33.820 --> 00:00:36.359
pillars of computer science. It's a piece of

00:00:36.359 --> 00:00:39.840
code whose entire specific purpose is to do absolutely

00:00:39.840 --> 00:00:43.079
nothing. It sounds like a joke. But engineering

00:00:43.079 --> 00:00:45.820
a functional void is it's actually one of the

00:00:45.820 --> 00:00:47.960
greatest architectural triumphs of early computing.

00:00:47.979 --> 00:00:51.100
Yeah. Because you cannot build a highly active,

00:00:51.159 --> 00:00:53.420
constructive environment without also building

00:00:53.420 --> 00:00:55.829
a place for the excess to disappear. Welcome

00:00:55.829 --> 00:00:58.689
to today's Deep Dive. We are jumping into a fascinating

00:00:58.689 --> 00:01:01.409
Wikipedia article and a stack of related notes

00:01:01.409 --> 00:01:03.950
detailing something known as the null device.

00:01:04.370 --> 00:01:07.109
The famous black hole of computing. Right. And

00:01:07.109 --> 00:01:09.430
our mission for this deep dive is to explore

00:01:09.430 --> 00:01:12.049
the anatomy of that black hole. We're going to

00:01:12.049 --> 00:01:13.689
figure out what it is, how it actually works

00:01:13.689 --> 00:01:15.569
under the hood to keep your devices running,

00:01:16.170 --> 00:01:20.250
and how this highly technical tool accidentally

00:01:20.250 --> 00:01:22.329
leaked out of the server room. Yeah, it totally

00:01:22.329 --> 00:01:24.750
sparked decades of nerd culture and inside jokes.

00:01:24.829 --> 00:01:27.090
And even electronic dance music, which is wild.

00:01:27.430 --> 00:01:30.769
It's a rare case of a purely architectural mechanism

00:01:30.769 --> 00:01:32.930
just taking on a life of its own. It became a

00:01:32.930 --> 00:01:35.420
whole psychological metaphor. And whether you

00:01:35.420 --> 00:01:38.299
are a seasoned software developer who routes

00:01:38.299 --> 00:01:41.000
things to the void every single day, or you're

00:01:41.000 --> 00:01:43.099
just someone feeling completely overwhelmed by

00:01:43.099 --> 00:01:45.540
the endless barrage of digital information in

00:01:45.540 --> 00:01:48.040
modern life. Which is all of us, basically. Totally.

00:01:48.579 --> 00:01:50.959
Understanding how complex systems gracefully

00:01:50.959 --> 00:01:54.239
handle nothingness is a profound aha moment waiting

00:01:54.239 --> 00:01:56.819
to happen for you. OK, let's unpack this. What

00:01:56.819 --> 00:01:59.480
exactly is the null device? Well, at its most

00:01:59.480 --> 00:02:02.319
basic, literal level within an operating system,

00:02:02.680 --> 00:02:05.099
the null device is a special kind of device file.

00:02:05.140 --> 00:02:08.400
OK. And its assigned job is beautifully, ruthlessly

00:02:08.400 --> 00:02:10.979
simple. It discards all data written to it. Just

00:02:10.979 --> 00:02:14.020
throws it away? Right. You can send it a single

00:02:14.020 --> 00:02:17.180
kilobyte of text, or you can point a continuous

00:02:17.180 --> 00:02:19.979
stream of terabytes at it. It really does not

00:02:19.979 --> 00:02:22.479
matter. It just eats it. It swallows the data

00:02:22.479 --> 00:02:25.419
whole and the data is gone forever. But the crucial

00:02:25.419 --> 00:02:28.379
detail, the part that is so conceptually funny

00:02:28.379 --> 00:02:31.520
to me, is that it doesn't just quietly delete

00:02:31.520 --> 00:02:33.680
the data and ignore the program that sent it.

00:02:33.719 --> 00:02:37.219
Right, it talks back. Yes. The null device actively

00:02:37.219 --> 00:02:40.860
reports back to the system that the right operation

00:02:40.860 --> 00:02:43.819
was entirely successful. That is the brilliant

00:02:43.819 --> 00:02:46.219
little lie at the heart of the void. It provides

00:02:46.219 --> 00:02:48.740
absolute validation. It really makes me think

00:02:48.740 --> 00:02:51.800
of one of those fake thermostats in a giant corporate

00:02:51.800 --> 00:02:54.120
office. You know the ones. Oh, absolutely. You

00:02:54.120 --> 00:02:56.439
walk up feeling too hot, and you crank the dial

00:02:56.439 --> 00:02:59.080
down to 68 degrees. And the digital display lights

00:02:59.080 --> 00:03:02.400
up. Right. It clicks pleasantly. Maybe it even

00:03:02.400 --> 00:03:04.620
flashes a little temperature -adjusted message

00:03:04.620 --> 00:03:07.199
to make you feel in control. But behind the drywall.

00:03:07.449 --> 00:03:10.129
There are no wires. It is not connected to the

00:03:10.129 --> 00:03:12.810
HVAC system at all. It just absorbed your input,

00:03:13.189 --> 00:03:14.689
made you feel like you accomplished something,

00:03:14.849 --> 00:03:17.370
and threw the request into the ether. What's

00:03:17.370 --> 00:03:20.150
fascinating here is why that polite little click,

00:03:20.729 --> 00:03:23.750
that fake validation, is absolutely critical

00:03:23.750 --> 00:03:25.930
to the survival of the operating system. Tell

00:03:25.930 --> 00:03:28.800
me more about that. Whoa. Computers, especially

00:03:28.800 --> 00:03:31.460
at the programmatic level, are incredibly rigid

00:03:31.460 --> 00:03:34.000
and rule -bound. When a software program generates

00:03:34.000 --> 00:03:36.599
an output, it expects that output to go somewhere.

00:03:36.639 --> 00:03:40.039
It demands a destination. Exactly. If a program

00:03:40.039 --> 00:03:43.000
is churning out constant status updates and those

00:03:43.000 --> 00:03:45.560
data streams have nowhere to go, they back up

00:03:45.560 --> 00:03:47.620
in the system's active memory. Like clogging

00:03:47.620 --> 00:03:50.180
a pipe. They clog the pipes. Eventually, the

00:03:50.180 --> 00:03:52.800
machine panics because of unhandled output and

00:03:52.800 --> 00:03:55.469
the whole system. crashes. Because the software

00:03:55.469 --> 00:03:57.830
literally doesn't know how to move on to the

00:03:57.830 --> 00:03:59.870
next instruction until it gets a receipt for

00:03:59.870 --> 00:04:02.669
the last one. Precisely. The program needs closure

00:04:02.669 --> 00:04:05.969
to continue functioning. Wow. By having a null

00:04:05.969 --> 00:04:08.229
device that actively intercepts the data and

00:04:08.229 --> 00:04:10.889
immediately reports message received, operation

00:04:10.889 --> 00:04:13.669
successful. The program feels satisfied. Right.

00:04:13.930 --> 00:04:16.850
It completed its task. It moves on, completely

00:04:16.850 --> 00:04:19.029
unaware that it didn't actually use up a single

00:04:19.029 --> 00:04:22.350
byte of physical hard drive space. The machinery

00:04:22.350 --> 00:04:24.449
of the operating system keeps running smoothly.

00:04:25.009 --> 00:04:27.930
OK, so dumping data in makes perfect sense. But

00:04:27.930 --> 00:04:30.230
what happens if a confused program reaches into

00:04:30.230 --> 00:04:32.889
the void and tries to pull something out? Like

00:04:32.889 --> 00:04:35.250
trying to read from it? Yeah. Does the system

00:04:35.250 --> 00:04:37.250
freeze while it waits for a response from an

00:04:37.250 --> 00:04:40.379
empty room? The engineers anticipated that, actually.

00:04:40.720 --> 00:04:43.540
If a program insists on reading input from the

00:04:43.540 --> 00:04:46.180
null device, it doesn't leave the program hanging.

00:04:46.639 --> 00:04:49.800
The null device immediately yields an EOF. An

00:04:49.800 --> 00:04:52.500
end of file marker. Right. It instantly says,

00:04:52.699 --> 00:04:54.319
hey, there is nothing here for you to read. We

00:04:54.319 --> 00:04:55.959
were already at the end of the document. So it

00:04:55.959 --> 00:04:58.980
just shuts it down immediately. Exactly. The

00:04:58.980 --> 00:05:00.860
requesting program accepts that it reached the

00:05:00.860 --> 00:05:03.560
end of the data stream, stops asking, and gracefully

00:05:03.560 --> 00:05:06.379
moves on. It is a perfectly sealed loop of logic.

00:05:06.540 --> 00:05:09.139
Looking at the history in our notes, this elegant

00:05:09.139 --> 00:05:11.839
solution has actually been around almost as long

00:05:11.839 --> 00:05:14.399
as modern computing itself. Yeah, going way back.

00:05:14.740 --> 00:05:18.480
Back in 1973, in version 4 Unix, the architects

00:05:18.480 --> 00:05:20.779
tried to handle this just by using an empty regular

00:05:20.779 --> 00:05:22.980
file. Which didn't really work out. Right, it

00:05:22.980 --> 00:05:26.220
wasn't robust enough. So by version 5 Unix, just

00:05:26.220 --> 00:05:29.319
a year later in 1974, the null device got these

00:05:29.319 --> 00:05:31.920
active modern semantics we were talking about.

00:05:32.540 --> 00:05:36.300
The system needed a dedicated mechanism for nothingness.

00:05:36.500 --> 00:05:38.860
Because an empty file is passive. A null device

00:05:38.860 --> 00:05:41.939
is active. It actively consumes and actively

00:05:41.939 --> 00:05:46.060
responds. That shift in 1974 fundamentally changed

00:05:46.060 --> 00:05:48.300
how operating systems manage resources. What

00:05:48.300 --> 00:05:51.339
blows my mind is how universal this concept became

00:05:51.339 --> 00:05:54.000
across entirely different computing civilizations.

00:05:54.199 --> 00:05:56.339
Every system had to figure it out. Over the decades,

00:05:56.740 --> 00:05:58.980
every major operating system had to build their

00:05:58.980 --> 00:06:02.060
own unique temple to the void. In Unix, and the

00:06:02.060 --> 00:06:04.180
Unix -like systems we still use today, like Mac

00:06:04.180 --> 00:06:06.879
OS or Linux, it is famously called slash dev

00:06:06.879 --> 00:06:09.860
slash null. But then older systems like CPM and

00:06:09.860 --> 00:06:13.269
DOS called it NUL, NUL. Internally written as

00:06:13.269 --> 00:06:16.029
backslash dev, backslash NUL. And newer Windows

00:06:16.029 --> 00:06:18.230
systems use that too, right? Just null. Yeah.

00:06:18.509 --> 00:06:20.990
Newer Windows uses null. If you're working in

00:06:20.990 --> 00:06:22.850
Windows PowerShell, the equivalent is dollar

00:06:22.850 --> 00:06:25.370
sign null. Oh, interesting. The classic Amiga

00:06:25.370 --> 00:06:27.970
operating systems, which is a real blast from

00:06:27.970 --> 00:06:30.089
the past. Oh, I love the Amiga. They called it

00:06:30.089 --> 00:06:34.259
NIL colon. OpenVMS went with NL colon. My favorite,

00:06:34.660 --> 00:06:37.759
though, has to be the massive IBM mainframes,

00:06:38.160 --> 00:06:42.000
the old Doe S360 and OS 360 systems from the

00:06:42.000 --> 00:06:45.779
1960s. Oh, the punch card days. Yes. When operators

00:06:45.779 --> 00:06:48.540
were writing their job control language, which

00:06:48.540 --> 00:06:50.899
is the incredibly strict code used to tell the

00:06:50.899 --> 00:06:53.519
mainframe what to do, they had to assign these

00:06:53.519 --> 00:06:57.560
empty files to a variable called ddDoMM. And

00:06:57.560 --> 00:07:01.990
we should explain why IBM needed DDDMY, because

00:07:01.990 --> 00:07:04.069
it perfectly illustrates the problem the null

00:07:04.069 --> 00:07:06.889
device solves. Please do. In the era of job control

00:07:06.889 --> 00:07:09.509
language, you were dealing with punch cards and

00:07:09.509 --> 00:07:12.709
literal room -sized computers. The code was brutally

00:07:12.709 --> 00:07:15.430
unforgiving. Super strict. If a program was written

00:07:15.430 --> 00:07:18.029
to output a report to a printer, but the user

00:07:18.029 --> 00:07:19.990
running the program didn't actually want or need

00:07:19.990 --> 00:07:21.930
a physical copy of that report, they couldn't

00:07:21.930 --> 00:07:23.810
just tell the mainframe to skip it. The mainframe

00:07:23.810 --> 00:07:26.209
would just refuse to run. It would completely

00:07:26.209 --> 00:07:29.230
halt. The code demanded an output destination.

00:07:29.389 --> 00:07:32.649
Wow. So programmers would route that specific

00:07:32.649 --> 00:07:36.870
output requirement to DDU -DU -MMY. They fooled

00:07:36.870 --> 00:07:39.050
the million -dollar mainframe into thinking it

00:07:39.050 --> 00:07:41.389
had successfully printed a report to a physical

00:07:41.389 --> 00:07:44.269
machine allowing the rest of the critical calculations

00:07:44.269 --> 00:07:47.170
to continue uninterrupted. That is so clever.

00:07:47.589 --> 00:07:50.089
So we have established this brilliant architectural

00:07:50.089 --> 00:07:52.649
trick of throwing data into a void to keep the

00:07:52.649 --> 00:07:55.209
system from crashing. But a tool that powerful

00:07:55.209 --> 00:07:57.569
isn't just a safety valve, right? No, not at

00:07:57.569 --> 00:07:59.389
all. Smart developers are going to weaponize

00:07:59.389 --> 00:08:02.750
it. How are programmers using this void proactively

00:08:02.750 --> 00:08:05.550
in their day -to -day work? The most common practical

00:08:05.550 --> 00:08:08.129
technique is called redirection. Okay. When you

00:08:08.129 --> 00:08:10.589
run a command in a terminal, it typically produces

00:08:10.589 --> 00:08:13.110
a firehose of data on your screen. Just lines

00:08:13.110 --> 00:08:15.250
and lines of text scrolling by. Right. Some of

00:08:15.250 --> 00:08:17.230
that is the actual result you want to see, but

00:08:17.230 --> 00:08:19.949
a vast majority of it might be minor warnings

00:08:19.949 --> 00:08:22.769
for both progress updates or diagnostic chatter

00:08:22.769 --> 00:08:24.790
that you simply do not care about. So they just

00:08:24.790 --> 00:08:26.850
get rid of it? Developers will literally point

00:08:26.850 --> 00:08:29.430
that exhaust pipe directly into the null device.

00:08:29.639 --> 00:08:31.519
So the program still runs, the important stuff

00:08:31.519 --> 00:08:34.179
still gets processed, but all the annoying noise

00:08:34.179 --> 00:08:36.480
is silently vaporized before it ever clutters

00:08:36.480 --> 00:08:39.340
up your screen. Exactly. You are manually filtering

00:08:39.340 --> 00:08:42.019
your reality by routing the garbage to the void.

00:08:42.279 --> 00:08:43.700
You know, I was trying to wrap my head around

00:08:43.700 --> 00:08:46.080
why anyone would purposely throw away data they

00:08:46.080 --> 00:08:49.340
just ask the computer to process. It seems counterintuitive.

00:08:49.440 --> 00:08:52.720
It does. And then I realized... What if you are

00:08:52.720 --> 00:08:54.679
doing a test run like the example we have in

00:08:54.679 --> 00:08:58.399
our notes of the tar command? Tar is a classic

00:08:58.399 --> 00:09:01.240
file archiving utility. It bundles huge amounts

00:09:01.240 --> 00:09:04.100
of files together. Take archive. It is a heavy

00:09:04.100 --> 00:09:07.299
duty tool. So imagine you have a massive directory,

00:09:07.720 --> 00:09:10.320
thousands of complex files, gigabytes of data,

00:09:10.320 --> 00:09:13.240
and you want to test the utility to see if it

00:09:13.240 --> 00:09:15.320
will hit any read errors or permission issues

00:09:15.320 --> 00:09:18.120
while packing all this up. Right. But you absolutely

00:09:18.120 --> 00:09:20.759
do not want to waste time and hard drive space.

00:09:20.750 --> 00:09:25.789
actually creating a massive 50 gigabyte duplicate

00:09:25.789 --> 00:09:29.330
archive file just for a basic test. It would

00:09:29.330 --> 00:09:31.950
bring your workflow to a grinding halt. So you

00:09:31.950 --> 00:09:34.090
type the command to create the archives, but

00:09:34.090 --> 00:09:36.490
you point the destination directly into slash

00:09:36.490 --> 00:09:39.129
dev slash null. Brilliant. The utility goes through

00:09:39.129 --> 00:09:41.429
all the motions. It reads every single file.

00:09:41.490 --> 00:09:43.990
It processes them. It reports any errors it encounters

00:09:43.990 --> 00:09:47.960
to your screen. But the massive 50 gigabyte payload

00:09:47.960 --> 00:09:50.700
it is simultaneously generating. Toss straight

00:09:50.700 --> 00:09:53.139
into the incinerator. Exactly. You get all the

00:09:53.139 --> 00:09:55.539
diagnostic benefits of the process with zero

00:09:55.539 --> 00:09:57.559
physical baggage. That's the ultimate dry run.

00:09:57.779 --> 00:09:59.539
Wait, hold on. This brings up a question. Sure.

00:09:59.940 --> 00:10:02.779
If slash dev slash null is officially classified

00:10:02.779 --> 00:10:05.799
as a file in Unix, why can't I just use it as

00:10:05.799 --> 00:10:08.220
my ultimate permanent trash can? What do you

00:10:08.220 --> 00:10:11.029
mean? Why can't I just take a giant folder full

00:10:11.029 --> 00:10:14.450
of blurry photos or old documents, use the Unix

00:10:14.450 --> 00:10:16.490
MV the move command and just shove the whole

00:10:16.490 --> 00:10:19.389
physical folder into slash dev slash null to

00:10:19.389 --> 00:10:22.629
instantly nuke it? It is a totally logical assumption,

00:10:23.070 --> 00:10:25.470
but it highlights a vital nuanced distinction

00:10:25.470 --> 00:10:28.830
in how operating systems separate types of data.

00:10:29.629 --> 00:10:32.470
Slash dev slash null is technically a special

00:10:32.470 --> 00:10:35.870
file, not a directory. It is not a container

00:10:35.870 --> 00:10:38.370
with dimensions. You cannot move a pre -existing

00:10:38.370 --> 00:10:41.610
physical file or folder into it. Why not if its

00:10:41.610 --> 00:10:44.389
whole job is to eat beta? Because of the fundamental

00:10:44.389 --> 00:10:46.309
difference between a real -time stream of data

00:10:46.309 --> 00:10:49.190
and a stored block of data. A stream versus a

00:10:49.190 --> 00:10:52.149
block. Right. When you use the move command on

00:10:52.149 --> 00:10:55.090
a folder of photos, you are asking the file system

00:10:55.090 --> 00:10:57.909
to take a physical block of data sitting statically

00:10:57.909 --> 00:11:00.330
on your hard drive and relocate its address.

00:11:00.490 --> 00:11:03.769
Oh, I see. slash dev slash null cannot process

00:11:03.769 --> 00:11:06.389
static blocks. It is a device interface designed

00:11:06.389 --> 00:11:09.149
to intercept real -time streams of data as they're

00:11:09.149 --> 00:11:11.169
actively being generated by a process. Oh, that

00:11:11.169 --> 00:11:12.990
makes so much sense. So it is the difference

00:11:12.990 --> 00:11:15.490
between turning on a hose and letting the flowing

00:11:15.490 --> 00:11:18.429
water run down a drain versus taking a solid

00:11:18.429 --> 00:11:20.549
50 -pound block of ice and trying to forcefully

00:11:20.549 --> 00:11:23.389
cram it into that same drain pipe. That is the

00:11:23.389 --> 00:11:25.669
perfect way to visualize it. The drain is engineered

00:11:25.669 --> 00:11:28.269
exclusively for the flow. It will reject the

00:11:28.269 --> 00:11:30.889
rigid structure of a pre -existing block. Just

00:11:30.889 --> 00:11:33.610
to round out the weird mechanics of it, what

00:11:33.610 --> 00:11:36.070
happens if you try to use the Unix cat command

00:11:36.070 --> 00:11:38.990
on the void? Oh, this is fun. Because the cat

00:11:38.990 --> 00:11:41.269
command usually reads a file and spits all of

00:11:41.269 --> 00:11:44.090
its text out onto your screen. But if you type

00:11:44.090 --> 00:11:49.029
cat slash dev slash null. It does absolutely

00:11:49.029 --> 00:11:51.230
nothing. Because it instantly hits that end of

00:11:51.230 --> 00:11:53.970
file marker we talked about. Exactly. It is essentially

00:11:53.970 --> 00:11:57.429
equivalent to running the Unix command true or

00:11:57.429 --> 00:12:00.330
just typing a colon. Which do what? Both of those

00:12:00.330 --> 00:12:02.549
are commands that literally do nothing except

00:12:02.549 --> 00:12:06.230
return a success status to the system. The architecture

00:12:06.230 --> 00:12:09.029
of nothingness is surprisingly robust. It covers

00:12:09.029 --> 00:12:11.370
every possible angle of interaction. It really

00:12:11.370 --> 00:12:13.389
does. Here's where it gets really interesting,

00:12:13.549 --> 00:12:15.509
though. We have established the technical mechanics.

00:12:15.909 --> 00:12:18.110
We know what the void is, how it intercepts streams,

00:12:18.169 --> 00:12:20.289
and why it lies to the system to keep things

00:12:20.289 --> 00:12:23.190
running. Right. But a concept this elegant and

00:12:23.190 --> 00:12:25.710
this absolute It doesn't just stay trapped in

00:12:25.710 --> 00:12:28.750
the code. It leaks out. It becomes culture. It

00:12:28.750 --> 00:12:31.490
evolves into a pervasive metaphor. Yes. This

00:12:31.490 --> 00:12:35.490
1970s Unix architecture blossomed into the everyday

00:12:35.490 --> 00:12:39.070
jargon of programmers. The null device is famously

00:12:39.070 --> 00:12:41.789
known in hacker communities as the bit bucket,

00:12:41.990 --> 00:12:44.669
or simply the black hole. It provided a shared

00:12:44.669 --> 00:12:47.610
vocabulary for an absolute dead end, a place

00:12:47.610 --> 00:12:50.370
of no return. And developers started using it

00:12:50.370 --> 00:12:52.750
as a jocular brush off in their social lives.

00:12:52.850 --> 00:12:55.019
Oh yeah, you hear it all the time. someone might

00:12:55.019 --> 00:12:57.340
be complaining in an office and a programmer

00:12:57.340 --> 00:12:59.860
will just casually say, please send complaints

00:12:59.860 --> 00:13:03.620
to slash dev slash null. Yep. Which is an incredibly

00:13:03.620 --> 00:13:06.639
nerdy, highly specific way of saying, don't bother

00:13:06.639 --> 00:13:08.500
sending me your complaints because I'm absolutely

00:13:08.500 --> 00:13:10.340
not going to read them. But I will pretend I

00:13:10.340 --> 00:13:12.860
did. You also see people using it as an excuse

00:13:12.860 --> 00:13:15.919
saying, sorry, my mail got archived in slash

00:13:15.919 --> 00:13:18.659
dev slash null. That's hilarious. It is a technical

00:13:18.659 --> 00:13:20.480
absolution for deleting an email you didn't want

00:13:20.480 --> 00:13:23.279
to reply to or simply telling a coworker to read

00:13:23.279 --> 00:13:26.789
direct. to slash dev slash null which translates

00:13:26.789 --> 00:13:29.610
to please cease your current output stream and

00:13:29.610 --> 00:13:32.429
go away. We even see this applied to real world

00:13:32.429 --> 00:13:35.470
financial boundaries. Like the iPhone dev team,

00:13:35.669 --> 00:13:38.330
a very prominent group in the early iOS jailbreaking

00:13:38.330 --> 00:13:41.149
community. They used to get bombarded with people

00:13:41.149 --> 00:13:43.070
asking how they could donate money to support

00:13:43.070 --> 00:13:45.549
their software tools. Oh, right. I remember this.

00:13:45.710 --> 00:13:48.929
The team famously used the phrase send donations

00:13:48.929 --> 00:13:52.990
to slash dev slash null. They used a Unix file

00:13:52.990 --> 00:13:56.210
path to politely but firmly declare that they

00:13:56.210 --> 00:13:58.759
refuse to accept money. And out of all these

00:13:58.759 --> 00:14:01.120
metaphors, a kind of modern mythology started

00:14:01.120 --> 00:14:04.240
to form. We see the personification of the void.

00:14:04.500 --> 00:14:08.299
Oh, Dave -null. Or sometimes Dev -null. The fictitious

00:14:08.299 --> 00:14:10.919
persona created by developers. Take that up with

00:14:10.919 --> 00:14:13.720
Dave -null and HR. Yes. It is the computer science

00:14:13.720 --> 00:14:15.659
equivalent of telling someone to go complain

00:14:15.659 --> 00:14:18.200
to a brick wall. You are giving a human face

00:14:18.200 --> 00:14:20.820
to the incinerator. It softens the absolute franality

00:14:20.820 --> 00:14:22.820
of the concept. And once you name the void Dev

00:14:22.820 --> 00:14:25.259
-null, the cultural crossover is inevitable.

00:14:25.379 --> 00:14:28.419
It has a distinct cyberpunk ring to it. It really

00:14:28.419 --> 00:14:31.340
does. And mainstream media absolutely ran with

00:14:31.340 --> 00:14:35.679
it. In 1996, the tech broadcaster Leo Laporte

00:14:35.679 --> 00:14:38.399
actually created an animated virtual reality

00:14:38.399 --> 00:14:40.820
character named Dev Null for his computer TV

00:14:40.820 --> 00:14:43.919
series, The Sight on MSNBC. I remember that character.

00:14:44.220 --> 00:14:46.500
Millions of people were watching a literal avatar

00:14:46.500 --> 00:14:48.679
of the Bitbucket on national television. The

00:14:48.679 --> 00:14:51.080
name pops up everywhere in the late 90s and early

00:14:51.080 --> 00:14:55.649
2000s. In the video game Vampire. The Masquerade

00:14:55.649 --> 00:14:58.450
Dash Redemption. There is a vampire hacker character

00:14:58.450 --> 00:15:01.750
literally named Dev Slash Null. No way! Yeah.

00:15:02.129 --> 00:15:04.250
There's even a real -life electronic dance music

00:15:04.250 --> 00:15:07.110
producer and jungle DJ who performs and releases

00:15:07.110 --> 00:15:09.909
records under the name Dev Slash Null. Even corporate

00:15:09.909 --> 00:15:12.230
marketing departments realize the power of the

00:15:12.230 --> 00:15:15.789
joke. Oh, the Apple ad? Yes. Apple ran an advertisement

00:15:15.789 --> 00:15:18.789
in 2002 pitching their new Titanium PowerBook

00:15:18.789 --> 00:15:22.070
G4 laptop. The official ad copy boasted that

00:15:22.070 --> 00:15:27.120
this new machine sends other UNA - Which is a

00:15:27.120 --> 00:15:29.779
massive, highly targeted flex, if you understand

00:15:29.779 --> 00:15:31.870
the underlying operating system. Right. They

00:15:31.870 --> 00:15:35.070
are telling developers, our laptop is so powerful,

00:15:35.450 --> 00:15:38.210
it reduces the entire competition to discarded,

00:15:38.210 --> 00:15:40.830
deleted data streams. If we connect this to the

00:15:40.830 --> 00:15:43.370
bigger picture, all of these cultural artifacts,

00:15:43.549 --> 00:15:47.090
the EDM DJ, the vampire hacker, the Apple advertisement,

00:15:47.549 --> 00:15:49.909
they represent something vital about how technical

00:15:49.909 --> 00:15:52.850
communities function. Oh, so? These shared inside

00:15:52.850 --> 00:15:55.370
jokes build the necessary sense of identity.

00:15:56.370 --> 00:15:58.570
Computing, especially in its earlier decades,

00:15:58.889 --> 00:16:01.629
could be an incredibly solitary, abstract profession.

00:16:01.690 --> 00:16:03.889
You are working with invisible forces. Exactly.

00:16:04.070 --> 00:16:06.529
Having a shared mythology creates a bridge between

00:16:06.529 --> 00:16:08.870
isolated developers. Like the classic Sissigman

00:16:08.870 --> 00:16:11.230
joke, the system administrator runs into the

00:16:11.230 --> 00:16:13.149
room and frantically warns the office, everyone

00:16:13.149 --> 00:16:16.450
stop working, the servers slash dev slash null

00:16:16.450 --> 00:16:19.509
is 98 % full. Which is physically impossible.

00:16:19.590 --> 00:16:22.169
You cannot fill a void. Right. But sharing that

00:16:22.169 --> 00:16:24.830
moment of impossible panic separates the insiders

00:16:24.830 --> 00:16:27.509
from the the outsiders. It is a shibboleth. That

00:16:27.509 --> 00:16:30.210
desire to make the invisible visible perfectly

00:16:30.210 --> 00:16:33.710
sets up the legendary 1995 April Fool's prank.

00:16:34.090 --> 00:16:36.809
The German computer magazine said it ran a completely

00:16:36.809 --> 00:16:39.210
straight -faced article reporting that engineers

00:16:39.210 --> 00:16:42.750
had finally developed an enhanced slash dev slash

00:16:42.750 --> 00:16:45.570
null chip. A physical hardware implementation

00:16:45.570 --> 00:16:49.789
of the software black hole. Yes. The joke was

00:16:49.789 --> 00:16:52.529
that you would plug this physical microchip into

00:16:52.529 --> 00:16:55.210
your motherboard and it would efficiently dispose

00:16:55.210 --> 00:16:58.009
of all your system's incoming garbage data by

00:16:58.009 --> 00:17:00.669
converting it into a flicker on an internal glowing

00:17:00.669 --> 00:17:03.169
LED. Just a little light blinking. Just imagine

00:17:03.169 --> 00:17:05.329
a little light inside your computer case that

00:17:05.329 --> 00:17:07.930
blinks every single time a background error message

00:17:07.930 --> 00:17:10.849
is destroyed. It is brilliant satire. It takes

00:17:10.849 --> 00:17:13.609
this highly abstract invisible software process

00:17:13.609 --> 00:17:16.410
that we rely on every second and gives it a deeply

00:17:16.410 --> 00:17:18.789
satisfying physical manifestation. We want to

00:17:18.789 --> 00:17:21.049
see it work. Deep down we all want to see the

00:17:21.049 --> 00:17:23.430
garbage being destroyed. We want to see the fake

00:17:23.430 --> 00:17:25.690
thermostat light up when the data is vaporized.

00:17:26.049 --> 00:17:30.039
So what does this all mean? We started with the

00:17:30.039 --> 00:17:32.700
paradox of a device engineer to do absolutely

00:17:32.700 --> 00:17:35.099
nothing and we have traced its evolution from

00:17:35.099 --> 00:17:40.000
1973 Unix architecture all the way to EDM DJs

00:17:40.000 --> 00:17:42.319
and April Fool's jokes. It's been quite a journey.

00:17:42.460 --> 00:17:44.200
But bringing it back to you, listening to this

00:17:44.200 --> 00:17:47.299
right now, in a modern world where we are constantly

00:17:47.299 --> 00:17:50.200
bombarded by information overload, the endless

00:17:50.200 --> 00:17:52.799
push notifications, the unread emails, the 24

00:17:52.799 --> 00:17:55.660
-hour news feeds, we could probably all use a

00:17:55.660 --> 00:18:00.420
personal slash dev slash null. Exactly, a mental

00:18:00.420 --> 00:18:02.660
mechanism where we can successfully receive an

00:18:02.660 --> 00:18:05.339
unwanted input, politely acknowledge that it

00:18:05.339 --> 00:18:07.900
exists, and then immediately permanently discard

00:18:07.900 --> 00:18:09.619
it without letting it take up a single megabyte

00:18:09.619 --> 00:18:11.740
of our brain's hard drive space. I love that.

00:18:11.920 --> 00:18:13.720
The next time you feel overwhelmed by digital

00:18:13.720 --> 00:18:16.099
noise, just route it to Dave Knoll. That is an

00:18:16.099 --> 00:18:18.920
incredibly healthy way to apply a 1970s computing

00:18:18.920 --> 00:18:22.329
concept. to modern life. And it actually leads

00:18:22.329 --> 00:18:24.970
me to a final provocative thought drawn from

00:18:24.970 --> 00:18:27.410
the see also section of our notes. Oh, what is

00:18:27.410 --> 00:18:29.950
hiding in the see also section? A concept called

00:18:29.950 --> 00:18:33.210
write only memory. Write only memory, as opposed

00:18:33.210 --> 00:18:36.549
to read only memory or ROM. Correct. We have

00:18:36.549 --> 00:18:39.250
spent this entire deep dive exploring slash dev

00:18:39.250 --> 00:18:42.230
slash null, which is a software black hole. But

00:18:42.230 --> 00:18:44.720
the concept begs a fascinating question about

00:18:44.720 --> 00:18:47.519
the physical world. What happens when hardware

00:18:47.519 --> 00:18:50.119
engineers actually attempt to design physical

00:18:50.119 --> 00:18:53.140
computer memory that can only be written to but

00:18:53.140 --> 00:18:56.279
can never ever be read from? Wait, what possible

00:18:56.279 --> 00:18:58.980
use could a computer have for physical silicon

00:18:58.980 --> 00:19:01.420
components that are designed solely to forget

00:19:01.420 --> 00:19:03.480
the information you put into them? That is the

00:19:03.480 --> 00:19:06.299
ultimate question. It pushes the philosophy of

00:19:06.299 --> 00:19:08.859
the void directly under the circuitry itself.

00:19:09.109 --> 00:19:12.069
Back in 1972, an engineer named John G. Curtis

00:19:12.069 --> 00:19:14.490
at the electronics company Signetix actually

00:19:14.490 --> 00:19:17.789
created a highly detailed, entirely fake, two

00:19:17.789 --> 00:19:21.009
-page data sheet for a write -only memory microchip.

00:19:21.390 --> 00:19:23.390
They spoofed an entire hardware component. They

00:19:23.390 --> 00:19:25.089
went all out. The data sheet looked completely

00:19:25.089 --> 00:19:27.490
official. It had complex specifications for input

00:19:27.490 --> 00:19:29.950
voltage, cooling requirements, and intricate

00:19:29.950 --> 00:19:31.930
diagrams showing data going into the pins of

00:19:31.930 --> 00:19:34.069
the chip and just permanently disappearing. That

00:19:34.069 --> 00:19:36.769
is amazing. They published it as a joke, but

00:19:36.769 --> 00:19:39.920
it perfectly mirrored the software. slash dev

00:19:39.920 --> 00:19:43.220
slash null in a physical form. I highly recommend

00:19:43.220 --> 00:19:46.420
looking into the history of that 1972 signetix

00:19:46.420 --> 00:19:49.119
spoof just to see how deep the rabbit hole of

00:19:49.119 --> 00:19:51.859
engineered nothingness truly goes. That is wild.

00:19:51.960 --> 00:19:53.640
I am definitely going to have to look up those

00:19:53.640 --> 00:19:55.400
diagrams. Well, the next time you drop a piece

00:19:55.400 --> 00:19:58.200
of digital junk into the void or clear out your

00:19:58.200 --> 00:20:00.400
spam folder, take a second to appreciate the

00:20:00.400 --> 00:20:02.539
polite little click of that invisible thermostat

00:20:02.539 --> 00:20:05.240
successfully processing your request. Thanks

00:20:05.240 --> 00:20:06.519
for joining us on this deep dive.
