I want to make a video on Metroid Fusion. Let's do that. Metroid Fusion is the latest Nintendo Game Boy Advance game to be added to Nintendo Switch Online plus expansion pack on the Nintendo Switch. It's a generally well-received game with one perceived major flaw, it's painfully linear. Where Super Metroid lets you explore your own way, discovering new paths and areas, Metroid Fusion explicitly tells you, here. Go here. Here's a little marker on the map.  Plenty of ink has been spilled about how this compromises the Metroid experience. Take for example Robert Hughes' review for Nintendo Life, which reads, quote, Metroid Fusion's progression, however, is surprisingly linear. There's very little room for deviation from the main path for most of the game. Metroid Fusion has a story, one that it insists on telling and funnels you in one direction. So it's perhaps a little disappointing that Metroid Fusion often just seals off certain routes with locked doors, particularly towards the beginning of the game. It's this lack of ingenuity and originality that keeps Metroid Fusion from surpassing its 2D predecessor, Super Metroid, in quality. There are a lot of reviews like this, reviews that complain about how instead of feeling like a bold space adventurer, the Metroid Fusion formula leaves you feeling a complete lack of player agency. To which I say, yes, Metroid Fusion takes away your freedom. That's a great thing. Because Metroid Fusion is not Super Metroid. This isn't a space power fantasy where you play as a bombastic adventurer. This is a horror game. You're meant to feel a complete lack of control. You're meant to run and hide. And over the course of the story, you're meant to turn the tables to break free from the initially linear path the game sets for you. Sit back and relax, dear viewer, as I explain how the worst thing about Metroid Fusion is actually genius. The game's biggest perceived design flaw is actually exactly what makes its narrative so strong. Because, of course, a channel called Video Game Storytime is always going to love a game that tells its story well. So first things first, monologues. At the start of the game, it doesn't take any time at all for Samus to start monologuing like a cheesy Incredibles villain. The intro to Super Metroid has the player quickly escaping from an exploding pirate ship. The perfect way to sell the player on this idea that they're a bold space hero. In contrast, Metroid Fusion starts with text. Lots and lots of text. Samus explains in exquisite detail how she got a gross infection and she had to go to the doctor. I mean, it's obviously more scary than that. I remember playing this for the first time as a teenager, late at night in a dark room lit only by my GBASP and being absolutely freaked out right from the start. It helps that unlike some Metroid games I could mention, this one is incredibly well written. You get, or I get at least, a real sense of the hopelessness that Samus faces. How she's just barely survived death before the story has even started, and how she's tremendously unhappy with the lack of choices before her. I'm aware that some liberties were taken in localising this game into English, but without knowing exactly how the Japanese version plays out, I'm happy to say that I'm very fond of the story in the English version of the game as it is. Samus is not a decision maker for the first chunk of this game. She's a peon. She's running around following the orders of an emotionless AI commanding officer who in turn is relaying orders from the Galactic Federation. If the player feels frustrated at being boxed in, forced to take orders, unable to forge their own path, then Samus is right there with you. She complains fairly constantly at not having the freedom to do things her own way. But then this is a horror game, perhaps more so than any other Metroid title, including Metroid Dread. Samus isn't supposed to feel in control. The tone of a game is often set by how much freedom and control the player has. Something like Breath of the Wild is sold largely on its sandbox structure.  Five Nights at Freddy's, apologies for using two very obvious examples here, is the polar opposite. You have very little control over the situation. You're stuck in one place, and the few things you can control prove to be somewhat unreliable. That's what builds the tension. That's what makes the whole thing scary. Metroid Fusion is a game about having limited options in an environment that is slowly getting worse. There's a real sense of Dread that comes from being powerless, from having to rely on your absent overlords for support, from not being able to make your own choices about the way you approach the obstacles in your way. Right from the start, the computer AI Adam makes the point of telling you just how fragile you are. Samus has established a pattern of forgetting all of her abilities any time she gets a bonk to the head, but this one feels so much worse than usual. Because of the starting travelogue of hospital trips, it's clearly established that Samus isn't just weak, she's barely alive. She shouldn't be alive. Every foe she faces, even just the weird gooey zombies in the starting area, feel like a serious threat. So Adam gives orders, and both Samus and the player feel increasingly disgruntled at having to blindly do what they're told, especially when Adam's best-laid plans are clearly not working. Apparently systematically opening all the doors to every habitat on a floating spacesuit isn't a great plan. Who could have guessed? This is most keenly felt in areas that are clearly perfectly under control right up until Samus turns up doing Adam's bidding, at which point everything collapses as all the weird space monsters A escape and B get infected with deadly parasites that you're trying to contain. I mean, it's almost as if Adam's deliberately trying to ruin things, right? So before long, this exploration-heavy game where your exploration is clearly signed posted gains a new level of paranoia. Is your presumably benevolent AI commanding officer actually part of a wider conspiracy? Can you really trust anyone in this scenario? Is your discomfort with the gameplay actually because you shouldn't be listening to your AI commanding officer after all? All the while you're gaining new powers and abilities, most of which are carefully selected for you by the distant and shadowy powers that be that exist somewhere far away and far more safe. Eventually though, Adam's intel starts to completely fail. Things aren't where he says they should be on the map. After an hour or two of being locked into a rigid, fairly repetitive loop of doing what you're told, making things worse and then getting a small cookie now and then for your trouble, you have to start actually doing some independent exploration. It's at about this point that the game transitions from being straight horror to giving the player a better sense of freedom and heroism. I once heard it said that the difference between a victim and a hero is all in their response to impossible situations. When some lunatic comes along with a sadistic choice, a victim is forced to pick one bad outcome, while a hero rejects the choice entirely and finds a way to save everyone. In the face of increasingly poor odds, Samus and the player alike break the cycle of doing Adam's bidding. You find your own path not on any of his maps. You earn power-ups that he hasn't given you permission to use yet. You grow stronger and for the first time, you start to feel like you're in control of your own destiny. And Adam freaks out.  What were you doing in the super-secret part of the facility? By now, it's clear that whoever Adam answers to, they don't have your best interests at heart. It's too late to stop you now, though. The second half of the game is significantly less formulaic. You find yourself crossing back and forth between previously completely separate areas. The whole of the space station seems to be fighting you at every turn and you win and win and win again. I mean, obviously, you are still following a linear path, but it's more like the linear path that we're used to from a Metroid game, one that feels self-directed. You're no longer taking orders. Indeed, before the end of the game, Adam starts taking orders from you in a role reversal that highlights just how completely you've overcome your previous helplessness. The genius of making the first half of this game so rote, so repetitive, so lacking in free thought is that when you finally break free and start tearing things apart, your newfound freedom and power feels earned in a way that it doesn't in perhaps any other Metroidvania that I personally have ever played. The gameplay pairs wonderfully with the narrative, the themes of making your own choices, of not playing by the rules, of doing the right thing even when everyone else is pushing to turn you into a cog in their machine. As I say, I don't know how well this captures the sense of the original Japanese version of the game. As I understand it, some of these themes of fighting against the system are stronger in the English localization, but for me, it works. Metroid Fusion, because of its perceived flawed structure, is a game that in both narrative and gameplay starts with the player feeling powerless and lacking in choices and ends with the player feeling like an incredible hero for refusing to play by anyone else's rules. And because I need to mention them, yes, other rem exists and also has Adam in it. Metroid Dread also exists and AI Adam is in that game too. I'm just saying words to save you the trouble in the comments. Just focusing on Metroid Fusion, though, long before these other titles came out, I can't help but love how this unassuming GBA game manages to create such a dramatic and uncomfortable air of tension and how satisfying it is to puncture that tension as the game progresses. And this is all thanks to an element of the game that a lot of players consider to be a design flaw. For a really great video on how Fusion builds fear, check out my friend Dan's video over at Video Game Animation Study. And also my friend Hotsider is working on a Metroid video too, check his channel out as well. So there we have it. Metroid Fusion's linearity is a feature, not a bug. At least that's my take on this game anyway. Maybe it hits differently for me than for you and if so, well, fair enough, these things are entirely subjective. My point in all this is simply to say, this is a thing that I like. Some people don't like the structure of Metroid Fusion, but I do. I think it's very clever and it doesn't get enough credit for how it makes the player feel the exact paranoia and dread that it's designed to achieve. The moral of the story is that just because other people don't like a thing, in this case, linearity and signposting in games, it doesn't mean that you personally can't enjoy them. After all, isn't the whole point of Metroid Fusion that things are better if you think for yourself?


and so on. So you see that it's going to change in relation to the number of units. That's the point of us breaking it out in terms of a contribution margin type of income statement. So that gives us a contribution margin of the 52, which is the 100,000 minus the 48. And that gives us our 52 contribution margin. And then the fixed costs do not change. They're fixed. So kind of like the rent, the depreciation, the supplies, the insurance, they are what they are. And then if we add those up, the total fixed costs, 44,100. And the contribution margin, the 52 minus the fixed cost of 4,4100 gives us that 7,900 of the income from operations we saw in the prior income statement that was formatted in the traditional fashion. Now with a flexible budget, we can then do this for different income levels. So what if we have what if not income levels, but production levels. So what if we had 12,000 units then


Hey, this video's got a lot of shouting and a lot of bad language like more than usual because we're all drunk Sorry, also check these guys out. They're really cool and good friends And if you want to see more of these guys, here's a video of us playing Mario 64 multiplayer together Oh, we all just be knuckles and knuckles and knuckles and knuckles Anyway, so I popped champagne and dented my wall Wow, do we want jungle? Do you want a cake? We want an island? War Oh, yeah, yeah, let me show let me show my drink. Oh, I got real drinks this time. So you got real. Yeah, real drinks Check this out. All right, logger.  I got this this was recommended to me as someone who likes sort of fruit and Drinks and stuff. I immediately spilled everything. Not all of it. Yeah, it looks like lemonade That's why I picked it up for the stronger stuff. I have this this vibe. There we go What have everybody? 40% alcohol on that one. So I've got a I've got a 10% it's actually 9.95 percent But it's basically like an alchemist waiting to be so how how many turns are we thinking how many If one piece of advice the central area is Bowser's only the fly guy can take you That's what was my nickname in high school the fly guy Hell yeah, man, I have popped collars and everything. I don't know how to do a toad voice anymore It's been so long here. I I I can do I can do the toad voice. Hold on. Oh He's done. All right, we're doing 35 cool So what are what are the rules to this drinking game? Mmm.  Yes That's what start alcohol. We'll do Okay, fine. All right, what's that Three three three drink and four drinks in and I haven't we haven't even played the game careful You don't want us to die before we finish this game.  This one's for Alec my special angry boy.  No Do you want to chug straight up or do you want to take five shots back to back with somebody else? I think chugging will be better. Okay, all right. All right. I need you guys to count for me. All right I'm gonna start. Yeah three two one One two Three done. Oh my god. Oh All right boozles right. We had to play faster for Joseph's sake. That was the bitchiest chug I've ever done I don't I think anyone has done now you fools. This is home territory for me. This is the Mario game I know the best. I only I played this with no friends because I had none My coin You're one home for them all four of my coin come on. I'm a master. I'm a master of disaster again So close so close That's all three of us straight now. Yeah, we all of us are it yeah, I am I am donkey Kong Destroyer of worlds We all have to work together really we had to punch booze Yeah, I can jump out of here booze.  Do we drink? Oh god Thanks for the two thousand. Oh god. That's disgusting. Give me some water. I'm gonna have to pour more drink I don't know if you guys are also doing I think I've made bad decisions. I agree. I immediately regret my decision Can I afford it I don't think so Look at that. Look at that. I have 19 I'm gonna focus I'm gonna get the star now. Okay. All right get your drink ready boys Drink out the red I've already won. Hi. Yes, sir. I've been kidnapped. Oh It's like I've been expecting you listen. Nobody's allowed to touch my butt Yeah, I just yeah, I'm feeling fine. I don't I'm just a little dizzy, you know, honestly, I'm fine.    All right drink up boy.  I'm sweating. You're sabotaging my my friends for me. I appreciate that Coins unless you lose coins from this you don't have to drink Apparently this is for me Alec I really don't want to I've done ever you owe me a favor from the last time All right, where I chugged and didn't Baby Chugging chugging chugging is never vomited by the way.   Why are you? No Yeah, I'm a master. See I can drink and drive Alec, you don't have to drink anymore. All you got to do is say the magic words I don't like this map. Why'd you guys pick this map?   I can't believe you got it already fucked. Listen. They're both green things It's just you know, it's hard different kinds of green things. Do you green things all look a lot to you? Yes, stop left. There you go. Shush. I got this stop back seating bottom left.  I know I know how to video game top Shhh I'm good. I'm I'm good at video games. Okay. I am the video game boy. I'm the one who wins I know matching games.  I'm good. I feel good damn it Wait, isn't that like counter-intuitive to mario? Yeah, you want in mario? You're supposed to avoid the piranha plants This is not this is not true to the lore. Hi dizzy Joe. How do you do? I'm doing very good regular renault How are you doing? Excellent. People have caused me to drink quite a bit though. I'm concerned. What's gonna happen later How many drinks have you had? Do you know I have no idea great not randomly? Yes.  They look like they're actually in pain. Yeah Oh, can I control this?  I can Well, do I need to drink for that? Does that count as a loss? I kind of want to give joseph a pass on that one just because I feel bad.  I'll drink Okay. Hey mario. Would you uh, you feeling it now mr. Krabs? I'm definitely feeling it mr.  It's straight branding. It hit me all at once What happened? What'd you do? Addict engine? Thank you for the follow Well, please don't bark. Oh, yeah, no, I feel vomiting already. No. No, come on. Come on. Come on.  Please.   I am already nauseous What?   Oh, my god, we should go Crossing that high five buddy Oh god, please please please snap sooner or later. Yes You won't be able to survive without these three coins. All right fine. I guess I'm not helping you next time. Gosh Drink up boys. I'll get a bit closer.  I would Never mind Nobody heard that. I mean like I told you guys before in a previous stream My future wife is going to be a bowser cosplayer. So like yeah, except why is that a hundred dollars? Maybe five shots is going to be more than you chugging for three seconds But you get to take someone down with you you decide Wait, who who do I I get to pick one person? One person I'll be honest in my slightly, um in my more meditative, uh, clear minded sober state He's saying that so he doesn't get drunk. Hold on. I gotta I gotta think about this Joe What no, I'm okay. No, I didn't fall. I'm okay. We're not All right.    I would be nice, but I'm drunk. Yeah. No. Yeah I am I didn't lose any one who lost Oh, I hope yeah, renal you can order food. You know everybody in joseph's chat I order renal's an obnoxious amount of food and he has to deal with that good lord I worry, you know somebody that's that my chat to him. I'm sorry, but I'm not like saying a lot When I'll get some order us Because we're bowling pins see if I could do slightly better than hitting a gutter. Oh the right of the needle I forgot how to control a button suddenly Chewing some pretzels and talking to him. Yeah, absolutely. It's just really good. Jesus. I'm sorry.  I want to hear joseph talk joseph. How are you doing? I'm dying. I'm doing all right. I just didn't want to interrupt any Delicious gator juice. I don't even know what I was trying to say. It's okay though. I think this is the most No, I'm pressing it. I don't know how to play video games. I'm pressing it. I honest doing it Yeah, nice.  You got this. I'm sorry. I'm pressing it. I am I'm pressing it. How are you boys? I'm pressing it. I promise They asked you how you are. You just have to say that you're fine when you're not really fine And you just can't get into it because they would never run That's so sad.  That's so sad. Start with kraken. You probably need this It's your time. Where am I going? So I think We're in all the one Wait, I didn't I lost. I lost the most somehow. Okay Uh I have no idea Good job.    I just want you guys to know I very much appreciate you coming To watch it's an insane amount of people. I didn't want to interrupt anybody, but That's this is this isn't I love you all You know This is great.  Hold on I hit the mic. I'm sorry.    Your editing is awesome. My dude And I love your voice You're great.  He's talking about us nicely. All right. Sorry.  There you go. All right. Sorry. Go ahead No, I'm good.  Oh, no b Wow Joe, we love you by the way Thank you. I love you too. I need to I appreciate that.  Thank you twerk and niece He's drunk guys. He's gone.  I can barely even tell what color I am. All right, there we go.  Alec take a breath. I want to hear it. You got it, baby. I want to hear it Uh I thought I wouldn't be in control, but I feel I'm in I'm still in control Are you though? No, I am though. Like I can if I like focus If I like I feel lost Alec is sorry Zack is trying so hard. There it goes. Okay, Alex. You got it too. You got it No, because I can hold on Give me a second. Oh, no, almost almost. Yeah Joe, are you still drinking?  I dropped my controller. Where is it? Yeah, I don't worry. I Get another star. I ate dinner all of my coins. I ate dinner before the stream. Don't worry You have five stars Why are we so bad people are always People are always asking for arcane for for unearthed arcana, but I'm just Hey, Joseph, how's it feel that you can message any like Semi-big twitch streamer and be like hey want to stream together and they'd say yes Can I yeah, you could man He's like Not a lot of people know who I am still like I still feel kind of small Anyone who plays dnd knows what you are Oh, I hope mad mercer knows who I am that guy's so cool.   I don't know Yeah, what's on uh, macchina Machina one of those two words vox macchina machinima, right? I do know that he liked a tweet that was tagged in by somebody else who referenced my video I got this Oh How you doing my friend? I check. Yeah, that's right. All right.        I wish you were dead. I want to win Yeah, well, you're not gonna You don't know that Anyway, like when I was making the paladin video I was so proud and then and but then like when I was editing I'm like, I'm not sure I was like is this even like good, you know And yeah, like because I have a lot of self-taught Because that's how I felt with like the original player video and then I disappointed a lot of people Yeah, don't worry about that. Disappointed dude.  Joseph. I take it back.  Why would you listen to yourself? Right? Anyway, this is mine. This is mine. This is mine. This is mine. This is mine.  You just have a hand. Oh, this is the last turn This is the last I have to turn it around to your right here right now. Alec. Are you there? Okay Alec is about hey, hey, joseph.   I'm like this fall. Okay. Thank you. We're done Loose hey guys, I have seven stars. Oh my god. I think I won. We got no, but you're the only one who got bonus stars Seven is not a number That's it boys. Everybody heard it here first. All right. Zachary. All right. Zachary the shrimp has become the Super star of all of the drug barrio parties the most wins the most Big I am a god among them and I demand a colt by the end of tonight. Good job. Well done. Thank you, Zach I ended the war You got last place I tried my best So drink up By rinald and alec and zach. Thank you so much for this. This is a lot of fun All right, great And the dudes hi chat hi hi chat I I just wanted you to know this is the most viewers. I think I've got Hi chat and I know a lot of you came from the videos. Yeah, I have I don't worry. I've been drinking water Thank you so much for watching and joining in Like I know a lot of you don't and this is a special occasion So it means a lot that you joined me in here and I'm sorry. I didn't say a lot I kind of left it a lot to um the other people But thank you so much for watching You know It means a lot. You're amazing. You're the man It was it was very hectic and a lot of noise and shouting But yeah, okay, I'm just gonna be rambling. Good night, everybody


Hi everybody, thank you. Thank you for coming. We are tired to talk and to cover more of the aspects of IPv6 and Kubernetes that are not clear. But first of all, let me introduce us. I'm Antonio Hea. I'm Kubernetes contributor since 2019, I think. I started working on IPv6 and Kubernetes and this talk is because we started in Twitter complaining about IPv6, about Kubernetes, and then we met and say, well, there are a lot of things that we don't know about IPv6 and people don't know about Kubernetes and it's not clear how this is working. So why don't we meet and we talk and explain to people what are the problems? Let me introduce myself. My name is Fernando Gont. I'm an active participant at the ITF and I have done a lot of work on IPv6. So that's how we ended up getting together and joining forces about this. Go ahead. Yeah, so the key thing here is I work in Kubernetes and he works in ITF. So they define the standards that we have to use and in Kubernetes, we have an open source software project. We define the standard that we want to use and we need to use the standard that they define. That is not clear, but I think that you get what they're trying to mean. So in Kubernetes... Okay. There you go. Okay. So here we go. So in any software project there are two important concepts that we need to clarify. One is the reference architecture and other is the reference implementation. The reference architecture in Kubernetes is what we define with the APIs. We define APIs and we define behaviors. And then Kubernetes is a software project. So we deliver software to implement these APIs. The project is a project that is evolving continually. So you can see now some of the components of the cluster, but in the past there were more components. The project keeps evolving, keeps modularizing the different components and then defining new APIs. And then it's when in a Kubernetes cluster you have a reference architecture and a reference implementation. And this is the first myth. You don't have to use Qproxy, for example. We, Kubernetes, define a service API and Qproxy is an implementation. You don't have to use IP tables. You can use EVPF. You can use other technologies. You don't need to have to use a lot of things. So first myth of all that we need to clarify is Kubernetes defines APIs, defines behaviors. How Kubernetes ensures these behaviors are compliant. It defines E2E tests. There is a whole conformance project that gives users the security that they are clusters of conformance with what Kubernetes defines. Okay. So we talked about APIs. This is just, we want to touch a bit on this because this is important to understand a bit better what is next in the talk. The API represents an object on the cluster and the API represents the content that we have with the components and with the clients and with the users. An API, I'm not going to go deep on this, is defined by a group and a version and a kind. And then you have some metadata to define some properties of the objects. And you have two important things here. You have the spec and you have the status. The spec is what the user or the components expect to happen. It's declarative. And the status is what the component on the cluster report to the user. So it's informative. And this is going to be important later for the presentation to understand better what are the myths on IPv6. So we can see here, the spec is decided state and the status is observed state. So more or less this is not, was not about networking, was more about general aspect of software development and Kubernetes in general. So let's go a bit deeper. So what is Kubernetes? Kubernetes is a platform that orchestrates containers, but the container is not the minimum application of Kubernetes. It's the pod. A pod is, we can say it's different containers that are running in the same networking space. And to run these pods, we need a compute. In Kubernetes, the object that represents the compute is the node. So what has a compute? We need network. We're talking about network in this talk. We need an old network. The compute has to be connected somewhere. And we need a pod network. And this is something that Kubernetes already defines. This is what Kubernetes defines is that this pod network has to have some special properties to meet the Kubernetes reference architecture. So it says that every pod should be able to reach every other pod without not in the pod network. It doesn't matter how do you create these networks, where are these networks living? You just need to meet these requirements. Okay. So if we see the API, when you have a node, you are going to have an object like this. Okay. We have different fields. And we can see that in status, you have the IP. So what does this mean is that you are not telling Kubernetes, I want a node with this IP. You are saying, the Kubernetes is saying, I have this node and this node has this IP. It is reporting to us. Who is doing that is doing the QLED. That's some component that Kubernetes clusters have. Okay. We can see clearly how the IPs are reflected. There is another option that you can use or know that you can specify the pod network. But this is optional and it's an implementation detail that you don't need to use what this is flipping. Okay. Okay. So, okay. We have a node. We have pod network. Now let's create a pod. You can start creating containers, right? We say the container has to live in the same network space. But then these containers need to be able to talk. They need a network. How the network is created? Well, the network is created is an implementation detail. The way that this work is the user create a pod. Say Kubernetes, I want to create this pod. I have this application. I have these containers. Just please go ahead and create a pod. Just go to the API server. The API server does its magic and go to the scheduler. The scheduler say, okay, you have this node that is free. And the scheduler points the modified the object to bind it to a node. Then the node has a component that's called the QLED and say, okay, I have a pod. I need to start to create a pod. And then there is a protocol that QLED use with the container runtime that can be container D or cryo that says, I want to create a pod. That's what Kubernetes says. Kubernetes doesn't say, I want to create this pod with this IP in this network. Kubernetes say to the container runtime, I want to create a pod. When it finish, the pod has an IP. The container runtime tells the IP to Kubernetes. And Kubernetes says, okay, you have your pod and this is the IP. So another important thing is that Kubernetes is not declarative about the IPs of the pod. It's an implementation detail. You can assign the IP whenever you want. You can use CNI. It's a problem on the container runtime. But, okay, we have pods. Okay. That's so far. It's so good. We have the pods. What are we going to do with the pods? Pods are ephemeral. Pods are not living. You cannot rely on the IP of one pod. So like everything in software, we create another abstracting ledger that is the service. We need to discover it. We need something consistent. We need to run applications. We don't want to run pods. Okay. So we create the service. The service for network people is just we can model it as a ledger for load balancer, right? Services are complex. We are going to have different types, but we're going to focus on the services with IPs here, okay? So think of the service like a ledger for load balancer. It gives you an abstraction. It gives you DNS discovery. So you can say, okay. And the service has another property. It's able to forward all the traffic to a set of pods. So you can aggregate the pods and in the service and say, I want to send my traffic to, okay? We have the definition of the service, right? We have the service. And we can say, service, use this IP and expose this pod. And with the selector, say, choose this pod. So all the traffic that goes to the, in this case, the IP of the pod is 10, 96, 0, 13. What Kubernetes does is implements the API. Then there are different components that implements the service capability that is usually not, okay? But you don't have to do that. The only thing that you need to do is to obey the properties of the pod network. You say, every pod should be able to reach every other pod without that. And now that I'm saying is the net is in the pod to pod communication, not in the pod to service communication, okay? Don't get confused. So when the pod tries to read the service, the magic happens. You proceed whatever implementation that you have and say, okay, you can go to any of these pods because I know this service has these vacants. Once you choose one backend, the packet goes to the backend. And can you see the IPs? The original IP is the original IP of the pod and the destination IP is another pod. That means that we have guarantees because of the network model that each pod is going to be able to talk with another pod, okay? So the other pod will see the IP. We do the magic reply. And before sending the packet back, because the original pod was asking the service, we need to switch again the original IP to the pod IP, okay? So far, this is how service work. Intra cluster, okay? But we have another necessity. We need these things to be published. We don't develop just for pods. We need people. Kubernetes uses a lot of companies and you need to publish your application. So this is the tricky thing. And Kubernetes was born with IPv4. You have all IPv4 private addresses there because who has the money to spend all these pods and knows IPs using public IPs, okay? It's not easy. So we need to solve a typical network problem. We need to be able to spot a private IP that is inside a network with another private IP to the internet. How do we do that? There are different ways of solving this problem. The most common solution is to use a load balancer, okay? In this case, we have the service as a new type that is called load balancer type, right? And you can see, like in the previous example, you can define this is going to be my front end. These are going to be my back ends. And in this case, something happened. You see? You can see the status. There is some magic, some controller externally that say, okay, this service is going to have a public IP and this is going to be the public IP.  And from the load balancer, I'm going to send you to the node. And from the node, I'm going to be able to send you to the pod, okay? So far, so good. We know, like, what are the networking problems that Kubernetes solved? And now we are going to understand better. We know that all these limitations are IPv4 limitations. So we are going to understand now better how can we improve this. So before actually getting into the specifics about IPv6 in Kubernetes, let me provide like a super brief introduction or overview about IPv6. I mean, IPv6 is rather complex, so we could be talking about IPv6 for quite a while. I will try to summarize in a couple, two or three slides, the most important aspects of IPv6 when it comes to Kubernetes. Okay? So first of all, in order to understand some of the features or the motivations for IPv6 or the idea behind IPv6, you have to understand the concept, the context in which it was developed. Many, many years ago, like over 20 years ago, it was like evident at the time that we would run out of IPv4 addresses. The Internet was a research project that was too successful, if you wish. So it was clear that we would run out of IPv4 addresses. So the question was like, okay, what do we do about it? So essentially, there were two different paths to actually solve the problem of IPv4 address exhaustion. Okay? One of them were like stop gaps, like short-term solutions, things to be able to extend the lifetime of IPv4. And then there was like, you know, more complicated, if you wish, longer-term solution. So what are the stop gaps? So this is SIDER and BLSM. Like essentially what we did was we got rid of, you know, classes in IP addresses. Even, you know, when still in a lot of places people still teach TCP IPs, if there were like classes in addresses, that has been long gone. Okay? With SIDER, BLSM, we got rid of classes. So we just have like, we are in a position to better use, you know, IP addresses, you know, oops, better performance when it comes to routing, and also be able to, you know, assign, you know, addresses in a more efficient way. That is, we were back one, I think. It was back a couple of slides. More, yeah, there. So that was the, you know, the stop gaps. And another feature or another, let's say, technology or mechanism that was like super useful, yet controversial, to extend the lifetime of IPv4 was the use of nuts. Okay? That is something that, you know, the IETF never liked, still doesn't like. But at the end of the day, ironically, one of the most successful technologies, right? So everyone is using, you know, not at home or even here anywhere. So those were the stop gaps, which, you know, they were super successful in extending the lifetime of IPv4.  So what was the longer-term solution? Well, the longer-term solution was to engineer a replacement protocol for IPv4. Just, you know, try to produce a protocol that, among other things, would provide like a larger address space. And this is IPv6. So main goal of IPv6, you will hear a lot of marketing claims about all of the things that IPv6 does, which is, for the most part, not true. The only thing that IPv6 does is provide, you know, more addresses, period. Okay? If you, you know, anybody that makes all their kind of claims, if you ask further, you'll realize that not true. It just provides more addresses.  So you might expect, okay, same protocol, different versions. So they should be able to interoperate. Well, not true. It's a completely different protocol. It could be named anything else, and it would be the same thing. Incompatible protocol, backwards incompatible protocol. So without a flag day, normally you'd have like a situation such as this one, okay? You are going to have like systems that only support IPv4, so they are IPv4 only. They will be part of the IPv4 Internet, so to speak. Systems that only support IPv6 will be part of the IPv6-only Internet, and you will see systems that support both protocols, the so-called dual stack systems. And of course, since they can speak both languages, both protocols, they can, you know, interoperate with, you know, or they can participate in the IPv4 Internet, so to speak, and the IPv6 Internet, if you wish. So that's one of the important aspects of IPv6. Now, the other important aspect is that I mentioned that, you know, the whole point about IPv6 is to provide a larger address space, okay? So that's probably the most important feature when it comes to IPv6. What can we say about IPv6 addresses? Well, they are 128-bit long addresses, so they are super long, maybe even too long, if you wish. But then when it comes to other aspects, they are similar to IPv4 addresses. For example, we will aggregate addresses for the purpose of routing, so you will see prefixes in the same way as you see for IPv4. We have multiple address types, same as in IPv4. There's unicast addresses, multicast addresses, et cetera. And we also have different address scopes. This is similar to IPv4. In IPv4, you have private address space, you have global address space, so this is similar in the IPv6 world, too. One thing that you might be surprised at when you first encounter IPv6 is that IPv6 hosts normally configure multiple addresses with different properties. So you will see the same interface that we will have, for example, a link local address, a global address, a unique local address, et cetera. So it's like the common case is for a network interface to configure multiple IPv6 addresses. And one final comment summarizing the whole thing is that the typical size for an IPv6 subnet is a slash 64. So 64 bits to actually configure like a host ID or an interface ID, more properly speaking. Now, there's another aspect that is important to highlight, which is the topic of unique local addresses. So essentially, unique local addresses provide private address space in IPv6. So you could say that it's the equivalent of the private address space from the IPv4 world, like the so-called RFC 18 addresses. There's probably one important difference in that when you configure ULA addresses, part of the prefix that you use for the addresses should be randomized. So let's say the specification says that when you configure a ULA prefix, you should randomize part of the prefix. And the goal of this is that if you were to use ULA space for one network in one company, for example, ULA space for another network in another company, and these two companies eventually were to merge, then you can avoid address overlaps, which in IPv4 we find all the time. They have one company using 10.0, blah, blah, another company using the same other space, and it's okay. But then one company acquires the other, and Houston, we have a problem there. So ULAs are supposed to help with this. Another thing to add is that ULAs are a controversial feature, controversial topic at the ITF. And the reason being, like the more hardcore IPv6 proponents say, well, we did this whole IPv6 thing to actually provide global addresses. So we are still proposing private addresses for IPv6. But the thing is the feature is there, and it's useful in many different scenarios. One thing to keep in mind is that the expected use case expected from the perspective of the ITF is that you use ULA space for internal communications, but the idea is that you don't use private address space in combination with NAT. And obviously the reason is that if we were to do private address space plus NAT, then why are we moving to IPv6 in the first place? Right? So it was here. Okay. There we go. So what's the deployment model for IPv4 and IPv6 if we compare the two? Well, if you think about the current architecture for IPv4, essentially you use private address space for your local network, and you connect your local network with the NAT to the public internet. Obviously, the thing is we don't have enough public IPv4 addresses, so we have to share them. But for IPv6, that's different because since we have enough public address space, the idea is that we can provide a public address, a global address, to each system that we have in our network. But normally what you want to do is not just simply connect your network with the router to the public internet because normally you don't want to expose all of your systems to the public internet. Even if quite a lot of people argue that you should do that, I'm 100% against that. Okay? So that's the deployment model for IPv6. Okay. So now let's, that's kind of like the overview of IPv6. So let's talk about how Kubernetes implements IPv6. So we talked before about Kubernetes and reference architecture, about APIs, about reference implementation, about implementation. So when Kubernetes defines the IPv4, you can see in the APIs, you can see the IPv4 address. So this is what Kubernetes does. And one important thing in Kubernetes, maybe some people disagree, is the users. So we want to provide a backwards compatibility. We don't want people to have, to change the thing. So you have one manifest and you apply the same manifest and then you got IPv6. That's how Kubernetes implemented IPv6. Transferring to the user, right? But then you have to say, well, but I have IPv4. I need to move to IPv6 and I need to deal with dual stack use cases, as Fernando said before. Okay. Don't worry. We got you. So we have another field. Instead of having singular fields, we add plural fields. And that's how Kubernetes reference architecture, the API, implemented IPv6 and dual stack. They just added the necessary fields so you can apply your manifest in one or the other environment. What is important here is what the implementation did. Yeah. So essentially this is like a dual stack, of course, a version of Kubernetes. You have IPv4 and IPv6 addresses. Now, if you want to think about how Kubernetes or what's a typical implementation for incorporating IPv6 supporting Kubernetes, essentially it's the architecture that we have in this slide. So essentially, we use private address space, ULA's, and connect whatever is using private address space with an app to whatever next network, like the Internet. So there are two things to think about this. What's the pro? What's the good thing about this? Well, it's that the IPv6 support mimics the IPv4 support. So at the end of the day, if you look at this, it's like, well, it's like IPv4 just with IPv6 addresses. So it's easier to understand what to expect, et cetera, et cetera. And that's the reason for which you will see this kind of implementation. Now, so far so good, this way of implementing IPv6 support is good. We have IPv6 supporting Kubernetes, but then this also begs the question, we are mimicking the IPv4 supporting IPv6. And the question is, are we missing the chance to actually leverage the addressing features of IPv6? The whole point of IPv6 is having more global address space. So if we just do private addresses plus not, we are not adding any kind of value to Kubernetes. So then what we did is try to ask ourselves, what could we do different here, of course, like instead of just implementing with IPv6 the same way that we do with IPv4, what could we do differently? And obviously, things that we could do is at least two things. One of them would be to provide global unicast addresses to services. And what could we do with that? Well, if the services themselves, they have global addresses, then we can get rid of the load balancer because the service itself is publicly available.  What if we were to give the pods themselves like a global address? So now we don't even need the service to have a global address because the pod themselves, like we have plenty of global address space, so we don't need to save addresses. So one thing that could be done is assign global addresses to the pods themselves. And if we could leverage the DNS to map a name to each of the pods that we want to connect to, then we could get rid of two layers of indirection. We could get rid of the load balancer, and we could get rid of the other layer of nuts. Of course, that's part of the story. You might wonder things like, okay, but if we give all the pods like global addresses, so who's going to protect the pods? What do we do about that? So obviously, there's other things to be analyzed and questions to be answered. So this would be the case of services with GUAs. Essentially, what we do is we get rid of the load balancer, okay? And we just can contact directly the service. We don't need the load balancer again. And then there's the other option, which is pods with GUAs. And what we could do is, essentially, we resolve the DNS name. We get, like, short live quad-day records. The idea, of course, you don't want to cache those records for a long time. And then we directly connect to the pods themselves. No load balancer, no service layer in there. Again, lots of details to be analyzed, like, for example, what do we do with the pods? How do we protect the pods if they have global addresses? And this is why it's to be continued, more analysis to be done. I think we have some couple of minutes for Q&A.