1 00:00:00,000 --> 00:00:02,120 All programmers are optimists. 2 00:00:02,120 --> 00:00:04,600 It's quite the opening line. 3 00:00:04,600 --> 00:00:06,080 Sounds a bit like a fortune cookie, 4 00:00:06,080 --> 00:00:07,520 but I'm guessing there's more to it. 5 00:00:07,520 --> 00:00:08,200 There is. 6 00:00:08,200 --> 00:00:10,400 It's from Frederick P. Brooks, Jr., 7 00:00:10,400 --> 00:00:11,960 from the Mythical Man Month. 8 00:00:11,960 --> 00:00:13,520 And it's the very first thing you 9 00:00:13,520 --> 00:00:15,000 see on the home page for the software 10 00:00:15,000 --> 00:00:16,240 we're talking about today. 11 00:00:16,240 --> 00:00:17,680 And I just love that energy. 12 00:00:17,680 --> 00:00:21,480 Because when you think about the sheer chaos of the internet, 13 00:00:21,480 --> 00:00:24,960 the spam, the bots, the crashes, you 14 00:00:24,960 --> 00:00:26,920 have to be an optimist to build something 15 00:00:26,920 --> 00:00:28,840 that handles our communication. 16 00:00:28,840 --> 00:00:30,280 Oh, absolutely. 17 00:00:30,280 --> 00:00:32,440 You'd have to believe it's possible to bring 18 00:00:32,440 --> 00:00:34,600 some order to all that chaos. 19 00:00:34,600 --> 00:00:37,240 A pessimist would just unplug the server and, I don't know, 20 00:00:37,240 --> 00:00:38,160 go live in a cave. 21 00:00:38,160 --> 00:00:39,040 Exactly. 22 00:00:39,040 --> 00:00:41,120 So today we're doing something a little different. 23 00:00:41,120 --> 00:00:42,620 We're going under the hood of something 24 00:00:42,620 --> 00:00:44,960 we all use constantly, every single day, 25 00:00:44,960 --> 00:00:46,000 without a second thought. 26 00:00:46,000 --> 00:00:47,560 We're talking about Postfix. 27 00:00:47,560 --> 00:00:49,880 The engine that actually runs our email. 28 00:00:49,880 --> 00:00:50,240 Right. 29 00:00:50,240 --> 00:00:51,840 Most people just click Send and assume 30 00:00:51,840 --> 00:00:53,360 some kind of magic happens. 31 00:00:53,360 --> 00:00:55,200 But there's this piece of software catching 32 00:00:55,200 --> 00:00:57,680 that message, figuring out where it goes, 33 00:00:57,680 --> 00:00:59,520 fighting off the bad guys, and making sure it 34 00:00:59,520 --> 00:01:01,360 doesn't just disappear. 35 00:01:01,360 --> 00:01:02,880 And we're going to demystify it. 36 00:01:02,880 --> 00:01:03,880 That is the mission. 37 00:01:03,880 --> 00:01:06,380 We're going to explain this so that even a total beginner can 38 00:01:06,380 --> 00:01:06,880 get it. 39 00:01:06,880 --> 00:01:10,440 We want to make this technical server software understandable, 40 00:01:10,440 --> 00:01:12,040 even if you're not a sysadmin. 41 00:01:12,040 --> 00:01:12,720 Sounds good. 42 00:01:12,720 --> 00:01:14,960 But before we dive into how your email actually 43 00:01:14,960 --> 00:01:17,120 travels the world, we have to give a quick shout out 44 00:01:17,120 --> 00:01:19,280 to the folks who make this deep dive possible. 45 00:01:19,280 --> 00:01:19,880 That's right. 46 00:01:19,880 --> 00:01:20,520 Safe server. 47 00:01:20,520 --> 00:01:26,600 Kimmert sich das Hosting dieser Software und unterstützt dich bei deiner digitalen 48 00:01:26,600 --> 00:01:27,940 Transformation. 49 00:01:27,940 --> 00:01:31,040 Mehr Infos unter www.safeserver.dady. 50 00:01:31,040 --> 00:01:31,540 Excellent. 51 00:01:31,540 --> 00:01:33,240 So let's go back to that quote. 52 00:01:33,240 --> 00:01:35,800 All programmers are optimists. 53 00:01:35,800 --> 00:01:38,040 Who is the optimist behind Postfix? 54 00:01:38,040 --> 00:01:40,840 So this story starts with a guy named Vizi Venema. 55 00:01:40,840 --> 00:01:43,480 And we're going back a bit here to the late 90s 56 00:01:43,480 --> 00:01:44,760 when he was at IBM Research. 57 00:01:44,760 --> 00:01:45,260 Right. 58 00:01:45,260 --> 00:01:48,680 And to really get why what Vizi built was so revolutionary, 59 00:01:48,680 --> 00:01:50,920 you have to understand what he was looking at back then. 60 00:01:50,920 --> 00:01:53,080 In the 90s, if you ran a mail server, 61 00:01:53,080 --> 00:01:55,960 you were almost definitely using a program called SendMail. 62 00:01:55,960 --> 00:01:58,680 And I'm guessing SendMail wasn't exactly perfect. 63 00:01:58,680 --> 00:02:00,400 That is a very polite way to put it. 64 00:02:00,400 --> 00:02:04,400 SendMail was the standard, sure, but it was just notoriously 65 00:02:04,400 --> 00:02:05,680 difficult to configure. 66 00:02:05,680 --> 00:02:08,040 Its config file looked like someone had just smashed 67 00:02:08,040 --> 00:02:09,120 their face on the keyboard. 68 00:02:09,120 --> 00:02:10,880 Oh, wow. 69 00:02:10,880 --> 00:02:14,080 But even worse than that, it was a security nightmare. 70 00:02:14,080 --> 00:02:15,120 How so? 71 00:02:15,120 --> 00:02:17,220 Well, it was a monolithic program. 72 00:02:17,220 --> 00:02:19,640 That means it was one giant piece of code 73 00:02:19,640 --> 00:02:21,120 that did everything. 74 00:02:21,120 --> 00:02:25,200 And because it did everything, it ran with root privileges. 75 00:02:25,200 --> 00:02:25,960 OK, root. 76 00:02:25,960 --> 00:02:27,880 For beginners listening, that's basically 77 00:02:27,880 --> 00:02:29,640 god mode on a computer, right? 78 00:02:29,640 --> 00:02:30,440 You can do anything. 79 00:02:30,440 --> 00:02:30,880 Exactly. 80 00:02:30,880 --> 00:02:32,560 The keys to the entire kingdom. 81 00:02:32,560 --> 00:02:35,440 So if a hacker found just one bug in SendMail. 82 00:02:35,440 --> 00:02:37,080 He didn't just break the mail server. 83 00:02:37,080 --> 00:02:38,400 They own the entire machine. 84 00:02:38,400 --> 00:02:39,420 That's terrifying. 85 00:02:39,420 --> 00:02:42,320 So Waitsy Venema wanted to build a better alternative. 86 00:02:42,320 --> 00:02:44,840 He wanted to build the anti-SendMail. 87 00:02:44,840 --> 00:02:46,680 And he really stuck with it. 88 00:02:46,680 --> 00:02:47,880 I mean, even after he went to Google, 89 00:02:47,880 --> 00:02:50,760 he was there for eight years, he kept maintaining Postfix. 90 00:02:50,760 --> 00:02:52,760 This wasn't just some corporate project for him. 91 00:02:52,760 --> 00:02:54,000 It was a passion project. 92 00:02:54,000 --> 00:02:54,800 That's rare. 93 00:02:54,800 --> 00:02:56,120 So let's talk about the design. 94 00:02:56,120 --> 00:02:57,720 You said SendMail was a monolith. 95 00:02:57,720 --> 00:02:59,480 How is Postfix different? 96 00:02:59,480 --> 00:03:01,440 Waitsy built it on three pillars. 97 00:03:01,440 --> 00:03:04,760 Fast, easy to administer, and secure. 98 00:03:04,760 --> 00:03:07,640 And the secure part is where the genius comes in. 99 00:03:07,640 --> 00:03:10,280 Instead of one giant program, Postfix 100 00:03:10,280 --> 00:03:13,440 is a collection of many small specialized programs. 101 00:03:13,440 --> 00:03:16,400 Like a team of specialists instead of one overwork manager 102 00:03:16,400 --> 00:03:17,160 trying to do it all. 103 00:03:17,160 --> 00:03:17,840 Precisely. 104 00:03:17,840 --> 00:03:19,800 You have one little program that just listens 105 00:03:19,800 --> 00:03:21,280 for network connections. 106 00:03:21,280 --> 00:03:23,680 A different one puts mail in the queue. 107 00:03:23,680 --> 00:03:25,320 Another one writes it to the desk. 108 00:03:25,320 --> 00:03:27,600 And the key is, most of these little programs 109 00:03:27,600 --> 00:03:29,920 do not run with root privileges. 110 00:03:29,920 --> 00:03:32,120 So if a hacker breaks into the program listening 111 00:03:32,120 --> 00:03:33,040 for connections? 112 00:03:33,040 --> 00:03:33,720 They're stuck. 113 00:03:33,720 --> 00:03:34,680 They're in a little box. 114 00:03:34,680 --> 00:03:36,440 They can't get to the rest of the system. 115 00:03:36,440 --> 00:03:38,040 It's a defense in depth strategy. 116 00:03:38,040 --> 00:03:39,640 That makes so much sense. 117 00:03:39,640 --> 00:03:41,640 But here's the part I found really clever. 118 00:03:41,640 --> 00:03:44,080 What I'm calling the Trojan horse strategy. 119 00:03:44,080 --> 00:03:47,080 Wheatsey knew that sysadmins are creatures of habit. 120 00:03:47,080 --> 00:03:50,060 They'd spent years learning those cryptic send mail commands. 121 00:03:50,060 --> 00:03:50,320 Right. 122 00:03:50,320 --> 00:03:52,160 You can't just throw all that knowledge out. 123 00:03:52,160 --> 00:03:55,920 So if he made Postfix totally alien, nobody would switch. 124 00:03:55,920 --> 00:03:56,440 Exactly. 125 00:03:56,440 --> 00:03:59,720 So he made the outside, the commands you type, 126 00:03:59,720 --> 00:04:02,060 have a very send mail-ish flavor. 127 00:04:02,060 --> 00:04:03,720 If you knew send mail, you could basically 128 00:04:03,720 --> 00:04:05,520 start using Postfix right away. 129 00:04:05,520 --> 00:04:08,320 But the inside, the engine, was completely different. 130 00:04:08,320 --> 00:04:09,120 Totally different. 131 00:04:09,120 --> 00:04:11,640 It's like he swapped out the engine of a classic car 132 00:04:11,640 --> 00:04:14,680 for a modern electric one, but kept the dashboard exactly 133 00:04:14,680 --> 00:04:16,880 the same so the driver wouldn't freak out. 134 00:04:16,880 --> 00:04:17,920 That's a great analogy. 135 00:04:17,920 --> 00:04:20,320 And because of that philosophy, it just spread everywhere. 136 00:04:20,320 --> 00:04:22,240 I saw the list of systems it runs on. 137 00:04:22,240 --> 00:04:24,400 It's a roll call of heavy duty computing. 138 00:04:24,400 --> 00:04:29,780 AIX, BSD, HVUX, Linux, Mac OS, you name it. 139 00:04:29,780 --> 00:04:32,500 If it's a UNIX-like system, Postfix 140 00:04:32,500 --> 00:04:33,760 is probably at home there. 141 00:04:33,760 --> 00:04:35,260 So for anyone listening, think of it 142 00:04:35,260 --> 00:04:38,000 like the universal translator of mail servers. 143 00:04:38,000 --> 00:04:40,040 It just works pretty much anywhere. 144 00:04:40,040 --> 00:04:42,240 It does, but that brings up a really important question. 145 00:04:42,240 --> 00:04:43,800 Postfix has been around a while. 146 00:04:43,800 --> 00:04:47,720 And in tech, software usually ages like milk, not wine. 147 00:04:47,720 --> 00:04:50,600 So how does it stay relevant in the age of the cloud 148 00:04:50,600 --> 00:04:52,440 and modern apps? 149 00:04:52,440 --> 00:04:53,880 That is the big question. 150 00:04:53,880 --> 00:04:56,280 We're in the era of Docker and Kubernetes. 151 00:04:56,280 --> 00:04:59,560 You'd think a legacy mail server would be completely obsolete. 152 00:04:59,560 --> 00:05:01,080 But it's not. 153 00:05:01,080 --> 00:05:03,640 And that's because Postfix has evolved. 154 00:05:03,640 --> 00:05:07,280 If you look at the 3.x versions, like 3.3 and 3.4, 155 00:05:07,280 --> 00:05:10,360 you see this huge push toward containerization. 156 00:05:10,360 --> 00:05:11,900 OK, let's unpack containerization, 157 00:05:11,900 --> 00:05:14,040 because that's a buzzword you hear all the time. 158 00:05:14,040 --> 00:05:15,520 Think of it like this. 159 00:05:15,520 --> 00:05:18,280 Old software, you installed it directly on the computer. 160 00:05:18,280 --> 00:05:19,320 It was messy. 161 00:05:19,320 --> 00:05:22,920 Today, we package software up in a sealed shipping container 162 00:05:22,920 --> 00:05:24,520 with all its dependencies. 163 00:05:24,520 --> 00:05:26,760 Like a pre-packed lunchbox for an application. 164 00:05:26,760 --> 00:05:27,800 Exactly. 165 00:05:27,800 --> 00:05:30,120 And you can ship that container anywhere. 166 00:05:30,120 --> 00:05:33,200 But software inside that box needs to act differently. 167 00:05:33,200 --> 00:05:36,200 For example, it often needs to be the boss process, what 168 00:05:36,200 --> 00:05:37,820 we call PID1. 169 00:05:37,820 --> 00:05:39,280 Postfix added support for that. 170 00:05:39,280 --> 00:05:40,480 And the logging thing. 171 00:05:40,480 --> 00:05:41,960 I found this fascinating. 172 00:05:41,960 --> 00:05:44,800 Old software wrote its logs, its diary to a text 173 00:05:44,800 --> 00:05:45,960 file on the hard drive. 174 00:05:45,960 --> 00:05:48,160 But in the cloud, that's a disaster. 175 00:05:48,160 --> 00:05:49,040 It is. 176 00:05:49,040 --> 00:05:51,080 Because containers can just vanish. 177 00:05:51,080 --> 00:05:53,960 If it crashes, the log file inside it is gone forever. 178 00:05:53,960 --> 00:05:55,240 You've lost all the evidence. 179 00:05:55,240 --> 00:05:56,800 So where should the logs go? 180 00:05:56,800 --> 00:05:59,320 Modern systems want the app to just shout its logs 181 00:05:59,320 --> 00:06:01,240 out the front door to sit out. 182 00:06:01,240 --> 00:06:03,160 The cloud platform catches them and stores them 183 00:06:03,160 --> 00:06:04,120 safely somewhere else. 184 00:06:04,120 --> 00:06:05,720 And Postfix learned to shout. 185 00:06:05,720 --> 00:06:08,160 In version 3.4, yes. 186 00:06:08,160 --> 00:06:09,800 It learned to shout. 187 00:06:09,800 --> 00:06:12,240 And that sounds like a tiny detail, but it's a huge deal. 188 00:06:12,240 --> 00:06:15,320 It means Postfix is acting like a modern cloud native app. 189 00:06:15,320 --> 00:06:16,560 It's learning the new language. 190 00:06:16,560 --> 00:06:18,080 Speaking of which, let's talk data. 191 00:06:18,080 --> 00:06:20,020 Because automation is everything now. 192 00:06:20,020 --> 00:06:23,600 Yes, and robots do not like reading messy text files. 193 00:06:23,600 --> 00:06:26,560 They like structured data, specifically JSON. 194 00:06:26,560 --> 00:06:27,920 Which is just a format that makes 195 00:06:27,920 --> 00:06:29,360 it easy for computers to read. 196 00:06:29,360 --> 00:06:32,600 And I saw Postfix 3.11 and added JSON output 197 00:06:32,600 --> 00:06:33,760 for its command tools. 198 00:06:33,760 --> 00:06:34,660 It did. 199 00:06:34,660 --> 00:06:38,000 So now a script, a robot can query Postfix, 200 00:06:38,000 --> 00:06:40,660 get a clean JSON response, and manage thousands 201 00:06:40,660 --> 00:06:42,520 of servers automatically. 202 00:06:42,520 --> 00:06:44,920 It makes Postfix easy for other machines to manage. 203 00:06:44,920 --> 00:06:47,440 And it's not just text files for user data anymore either. 204 00:06:47,440 --> 00:06:49,440 It can talk to all sorts of databases. 205 00:06:49,440 --> 00:06:50,600 Oh, the list is extensive. 206 00:06:50,600 --> 00:06:51,940 It's not just text files anymore. 207 00:06:51,940 --> 00:06:54,960 Postfix 3.9 added support for MongoDB. 208 00:06:54,960 --> 00:06:58,760 And it already supported MySQL, PostgreSQL, Swy, Redis. 209 00:06:58,760 --> 00:07:00,160 Wait, MongoDB? 210 00:07:00,160 --> 00:07:02,560 That's a super modern NoSQL database. 211 00:07:02,560 --> 00:07:04,820 Why would an email server need to talk to that? 212 00:07:04,820 --> 00:07:05,780 Think about a big company. 213 00:07:05,780 --> 00:07:08,320 You have one central database with all your employees, right? 214 00:07:08,320 --> 00:07:08,920 OK, sure. 215 00:07:08,920 --> 00:07:10,880 Your single source of truth. 216 00:07:10,880 --> 00:07:11,760 Exactly. 217 00:07:11,760 --> 00:07:14,120 You don't have to remember to also go update a text 218 00:07:14,120 --> 00:07:17,640 file on the mail server every time you hire or fire someone. 219 00:07:17,640 --> 00:07:18,200 I get it. 220 00:07:18,200 --> 00:07:21,240 So Postfix just plugs right into the main company database. 221 00:07:21,240 --> 00:07:21,740 Right. 222 00:07:21,740 --> 00:07:24,960 It asks the database in real time, does this user exist? 223 00:07:24,960 --> 00:07:26,760 Are they still an employee? 224 00:07:26,760 --> 00:07:28,520 If not, it rejects the mail. 225 00:07:28,520 --> 00:07:30,760 It connects the email world directly 226 00:07:30,760 --> 00:07:32,120 to the modern data world. 227 00:07:32,120 --> 00:07:33,880 But connecting is only half the battle. 228 00:07:33,880 --> 00:07:36,480 The other half is protection, because email 229 00:07:36,480 --> 00:07:38,800 is the number one way the bad guys get in. 230 00:07:38,800 --> 00:07:40,560 It's a very tough job. 231 00:07:40,560 --> 00:07:43,160 And Postfix has some clever ways to handle it. 232 00:07:43,160 --> 00:07:45,360 One of my favorites is a feature called Postscreen. 233 00:07:45,360 --> 00:07:46,280 Postscreen. 234 00:07:46,280 --> 00:07:47,360 Sounds like sunblock. 235 00:07:47,360 --> 00:07:50,600 Think of it more like a zombie blocker. 236 00:07:50,600 --> 00:07:51,360 A zombie blocker. 237 00:07:51,360 --> 00:07:52,240 OK, I'm listening. 238 00:07:52,240 --> 00:07:54,000 So you have all these compromised computers 239 00:07:54,000 --> 00:07:56,240 out there, zombies that are part of botnets, 240 00:07:56,240 --> 00:07:59,000 just spamming millions of servers. 241 00:07:59,000 --> 00:08:00,440 If your mail server tries to have 242 00:08:00,440 --> 00:08:03,880 a full, polite conversation with every single one, 243 00:08:03,880 --> 00:08:04,880 it gets overwhelmed. 244 00:08:04,880 --> 00:08:06,480 It runs out of resources. 245 00:08:06,480 --> 00:08:07,360 Completely. 246 00:08:07,360 --> 00:08:09,920 So Postscreen sits in front of the real server. 247 00:08:09,920 --> 00:08:12,080 It does these really lightweight checks. 248 00:08:12,080 --> 00:08:13,400 Is this IP on a blacklist? 249 00:08:13,400 --> 00:08:14,960 Is it behaving strangely? 250 00:08:14,960 --> 00:08:17,160 If it's a zombie, Postscreen blocks it 251 00:08:17,160 --> 00:08:19,040 before it can waste the real server's time. 252 00:08:19,040 --> 00:08:20,360 That's so smart. 253 00:08:20,360 --> 00:08:22,280 Efficiency of security. 254 00:08:22,280 --> 00:08:23,960 But what about the sneakier attacks? 255 00:08:23,960 --> 00:08:25,800 I read about these trickle attacks. 256 00:08:25,800 --> 00:08:26,800 Yes. 257 00:08:26,800 --> 00:08:28,760 Imagine someone calls you, you say, hello. 258 00:08:28,760 --> 00:08:30,920 And they say, hello, and then they wait 10 seconds. 259 00:08:30,920 --> 00:08:32,920 Then they say, how, and wait another 10 seconds. 260 00:08:32,920 --> 00:08:33,840 I'd hang up. 261 00:08:33,840 --> 00:08:34,800 That's infuriating. 262 00:08:34,800 --> 00:08:35,640 Exactly. 263 00:08:35,640 --> 00:08:37,040 But old servers were too polite. 264 00:08:37,040 --> 00:08:37,960 They'd wait. 265 00:08:37,960 --> 00:08:40,320 And attackers would exploit that by sending data 266 00:08:40,320 --> 00:08:43,800 incredibly slowly, one byte every few seconds, 267 00:08:43,800 --> 00:08:45,520 just to tie up all the connection slots. 268 00:08:45,520 --> 00:08:48,040 It's the passive aggressive denial of service attack. 269 00:08:48,040 --> 00:08:48,840 It is. 270 00:08:48,840 --> 00:08:50,560 But Postfix fought back. 271 00:08:50,560 --> 00:08:53,920 They added per request deadlines and minimum data rates. 272 00:08:53,920 --> 00:08:56,680 If you talk too slow, Postfix just hangs up on you. 273 00:08:56,680 --> 00:08:58,440 Talk fast or get off the line. 274 00:08:58,440 --> 00:08:58,960 I love it. 275 00:08:58,960 --> 00:09:00,020 It's necessary. 276 00:09:00,020 --> 00:09:01,720 And then, of course, there's encryption. 277 00:09:01,720 --> 00:09:04,640 All the acronyms, TLS, SSL. 278 00:09:04,640 --> 00:09:05,200 Right. 279 00:09:05,200 --> 00:09:07,280 And Postfix is really modern here. 280 00:09:07,280 --> 00:09:09,600 Back in version 2.11, they added support 281 00:09:09,600 --> 00:09:11,760 for something called Dane TLS. 282 00:09:11,760 --> 00:09:15,880 It's a way to use the DNS system itself to verify security 283 00:09:15,880 --> 00:09:17,960 without necessarily needing a traditional certificate 284 00:09:17,960 --> 00:09:18,720 authority. 285 00:09:18,720 --> 00:09:20,800 It helps decentralize trust. 286 00:09:20,800 --> 00:09:23,960 And then you have SNI, which lets one server host 287 00:09:23,960 --> 00:09:25,560 multiple encrypted domains. 288 00:09:25,560 --> 00:09:27,320 And require Teals. 289 00:09:27,320 --> 00:09:29,040 That one sounds demanding. 290 00:09:29,040 --> 00:09:29,800 It is. 291 00:09:29,800 --> 00:09:33,360 It's a way for a sender to say, this message must be encrypted. 292 00:09:33,360 --> 00:09:35,600 If you can't do it, don't even try to send it. 293 00:09:35,600 --> 00:09:38,160 It's for when good enough security isn't good enough. 294 00:09:38,160 --> 00:09:39,080 Which is critical. 295 00:09:39,080 --> 00:09:41,180 But speaking of critical, there's 296 00:09:41,180 --> 00:09:44,060 one area where Postfix is just absolutely obsessive. 297 00:09:44,060 --> 00:09:46,680 And this is my favorite nerd corner fact about it. 298 00:09:46,680 --> 00:09:48,080 I think I know where you're going. 299 00:09:48,080 --> 00:09:49,320 The file system requirements. 300 00:09:49,320 --> 00:09:50,000 Yes. 301 00:09:50,000 --> 00:09:50,880 This blew my mind. 302 00:09:50,880 --> 00:09:53,600 I always just assume when I save a file, it's saved. 303 00:09:53,600 --> 00:09:56,640 But Postfix has some serious trust issues with hard drives. 304 00:09:56,640 --> 00:09:58,080 It does, and for good reason. 305 00:09:58,080 --> 00:10:01,080 It operates on a zero data loss mentality. 306 00:10:01,080 --> 00:10:02,880 It requires that the file system properly 307 00:10:02,880 --> 00:10:05,260 supports the fysync command. 308 00:10:05,260 --> 00:10:06,680 OK, beginner translation time. 309 00:10:06,680 --> 00:10:07,480 What is fysync? 310 00:10:07,480 --> 00:10:10,520 So when a program tells a computer to write data, 311 00:10:10,520 --> 00:10:12,400 the computer often cheats. 312 00:10:12,400 --> 00:10:14,760 It sticks the data in fast memory and RAM and says, 313 00:10:14,760 --> 00:10:16,040 OK, done. 314 00:10:16,040 --> 00:10:18,600 It plans to actually write it to the physical disk later. 315 00:10:18,600 --> 00:10:20,560 So the computer is lying to you? 316 00:10:20,560 --> 00:10:22,300 It's being optimistic. 317 00:10:22,300 --> 00:10:25,680 It assumes the power won't go out in the next two seconds. 318 00:10:25,680 --> 00:10:28,840 But if it does, poof, the data is gone. 319 00:10:28,840 --> 00:10:31,240 And for a mail server, that's a lost email. 320 00:10:31,240 --> 00:10:34,800 Which Postfix finds completely unacceptable. 321 00:10:34,800 --> 00:10:37,120 Fink is the command that says, no, you 322 00:10:37,120 --> 00:10:39,840 will physically write this to the disk right now, 323 00:10:39,840 --> 00:10:42,260 and you will not tell me you're done until you are actually 324 00:10:42,260 --> 00:10:43,160 done. 325 00:10:43,160 --> 00:10:44,680 I'll do it in a minute for an answer. 326 00:10:44,680 --> 00:10:45,640 Never. 327 00:10:45,640 --> 00:10:47,640 The documentation is explicit. 328 00:10:47,640 --> 00:10:49,560 It says a file must not be lost. 329 00:10:49,560 --> 00:10:52,000 If the system crashes right after Fink returns, 330 00:10:52,000 --> 00:10:53,360 it demands that guarantee. 331 00:10:53,360 --> 00:10:55,280 And it even warns about virtual machines, right? 332 00:10:55,280 --> 00:10:56,080 Yes. 333 00:10:56,080 --> 00:10:57,400 That's the amazing part. 334 00:10:57,400 --> 00:11:00,080 It warns that the host machine can't cheat either. 335 00:11:00,080 --> 00:11:02,680 The data has to go all the way to the physical metal. 336 00:11:02,680 --> 00:11:05,280 That's digital banking level reliability. 337 00:11:05,280 --> 00:11:05,920 It really is. 338 00:11:05,920 --> 00:11:08,360 It shows that email isn't just casual chat. 339 00:11:08,360 --> 00:11:09,760 It's infrastructure. 340 00:11:09,760 --> 00:11:13,080 And Postfix takes its promises very, very seriously. 341 00:11:13,080 --> 00:11:15,960 Which is funny, because we think of email as so instant, 342 00:11:15,960 --> 00:11:18,520 but the back end is built to be bulletproof. 343 00:11:18,520 --> 00:11:19,560 It has to be. 344 00:11:19,560 --> 00:11:20,680 And it has to be global. 345 00:11:20,680 --> 00:11:22,140 That's another area where it's adapted 346 00:11:22,140 --> 00:11:23,520 with internationalization. 347 00:11:23,520 --> 00:11:25,600 Right, because not everyone's email address 348 00:11:25,600 --> 00:11:26,880 uses English characters. 349 00:11:26,880 --> 00:11:27,720 Exactly. 350 00:11:27,720 --> 00:11:30,720 For a long time, email was very ASCII-centric. 351 00:11:30,720 --> 00:11:35,560 But Postfix 3.0 brought in full support for SMTPUTF8. 352 00:11:35,560 --> 00:11:36,520 The ketty name. 353 00:11:36,520 --> 00:11:38,720 It just means it can handle international email 354 00:11:38,720 --> 00:11:40,300 addresses natively. 355 00:11:40,300 --> 00:11:43,480 So email addresses and headers with, say, 356 00:11:43,480 --> 00:11:45,720 Chinese characters or accents don't 357 00:11:45,720 --> 00:11:47,360 turn into a bunch of gibberish. 358 00:11:47,360 --> 00:11:50,380 That's huge for making the internet truly global. 359 00:11:50,380 --> 00:11:53,120 And of course, it supported IPv6 for ages. 360 00:11:53,120 --> 00:11:54,760 And it handles all the weird conversions 361 00:11:54,760 --> 00:11:56,680 needed to make sure modern attachments don't 362 00:11:56,680 --> 00:11:58,160 break old, ancient servers. 363 00:11:58,160 --> 00:12:00,400 The universal translator, again, connecting 364 00:12:00,400 --> 00:12:01,680 the old world to the new. 365 00:12:01,680 --> 00:12:02,200 Exactly. 366 00:12:02,200 --> 00:12:05,160 So when you step back, Postfix really is that, quote, 367 00:12:05,160 --> 00:12:06,160 come to life. 368 00:12:06,160 --> 00:12:08,120 All programmers are optimists. 369 00:12:08,120 --> 00:12:09,640 But it's like, we'd see Venema was 370 00:12:09,640 --> 00:12:13,400 an optimist who prepared for the absolute worst-case scenario. 371 00:12:13,400 --> 00:12:14,720 That's a perfect description. 372 00:12:14,720 --> 00:12:16,480 It's this optimistic workhorse. 373 00:12:16,480 --> 00:12:17,960 It looks like the old stuff, but it 374 00:12:17,960 --> 00:12:19,600 acts like modern infrastructure. 375 00:12:19,600 --> 00:12:20,960 It speaks JSON. 376 00:12:20,960 --> 00:12:22,040 It lives in containers. 377 00:12:22,040 --> 00:12:23,600 It talks to MongoDB. 378 00:12:23,600 --> 00:12:26,240 But deep down, it's all about that reliability. 379 00:12:26,240 --> 00:12:28,240 That Fesync requirement is the heart of it. 380 00:12:28,240 --> 00:12:31,160 It's like it's saying, I don't care how fast you want to go, 381 00:12:31,160 --> 00:12:32,960 we are not losing this letter. 382 00:12:32,960 --> 00:12:34,120 Precisely. 383 00:12:34,120 --> 00:12:36,560 So what does this all mean for us, 384 00:12:36,560 --> 00:12:38,640 the actual users hitting send? 385 00:12:38,640 --> 00:12:41,240 Well, I think it leaves us with a provocative thought. 386 00:12:41,240 --> 00:12:44,520 We live in this era of move fast and break things. 387 00:12:44,520 --> 00:12:48,160 Apps crash, data glitches, services go down, 388 00:12:48,160 --> 00:12:50,200 and we kind of just shrug. 389 00:12:50,200 --> 00:12:52,800 But Postfix is a reminder that some software, 390 00:12:52,800 --> 00:12:54,400 the deep plumbing of the internet, 391 00:12:54,400 --> 00:12:56,880 is designed to never break things. 392 00:12:56,880 --> 00:12:59,400 When you hit send on that important contract 393 00:12:59,400 --> 00:13:02,960 or that job application, you're not relying on magic. 394 00:13:02,960 --> 00:13:04,600 You're relying on that obsession. 395 00:13:04,600 --> 00:13:06,680 You're relying on the fact that somewhere a server 396 00:13:06,680 --> 00:13:09,480 is refusing to say okay until your message 397 00:13:09,480 --> 00:13:11,600 is physically permanently written to a disk. 398 00:13:11,600 --> 00:13:13,760 I love that, the invisible reliability 399 00:13:13,760 --> 00:13:14,880 that keeps everything running. 400 00:13:14,880 --> 00:13:16,440 Well, before we sign off, a quick reminder 401 00:13:16,440 --> 00:13:18,040 about who helps keep us on the air. 402 00:13:18,040 --> 00:13:21,000 SafeServer takes care of hosting this software 403 00:13:21,000 --> 00:13:24,040 and supports you in your digital transformation. 404 00:13:24,040 --> 00:13:27,800 More information at babyww.safe-server.iege. 405 00:13:27,800 --> 00:13:28,800 Check them out. 406 00:13:28,800 --> 00:13:30,120 And thank you for diving deep 407 00:13:30,120 --> 00:13:32,560 into the internet's plumbing with us today. 408 00:13:32,560 --> 00:13:33,600 Next time you send an email, 409 00:13:33,600 --> 00:13:35,640 maybe take a second to appreciate the engine 410 00:13:35,640 --> 00:13:36,480 getting it there. 411 00:13:36,480 --> 00:13:38,760 It's a bumpy ride out there, but Postfix has your back. 412 00:13:38,760 --> 00:13:40,280 See you on the next Deep Dive.