My name is Case Cook, I'm here presenting with Gustavo. My name is Gustavo. We're talking about the progress on bounds checking in C, and most specifically how it applies to Linux kernel. If you want to follow along, the slides are there since we have some links in each page. Just quick agenda, what we're talking about, like our goal is memory safety. We're going to talk, look at, you know, C and it's missing bounds checking. Problems with the existing workarounds, where the current medgations are and why they lack coverage, and then what we've done to improve coverage, both with refactoring and annotation, and then the compiler work we've got, and some numbers at the end. So, goal is memory safety. One of the more tractable topics for memory safety is just bounds checking, getting spatial safety. A huge number of security flaws fall into this basic category, and a lot of it could be solved by the compiler. The problem is that the standard C language is just too ambiguous and lacks a way to describe a lot of these bounds. For simple arrays that are fixed size at compile time, these protections exist. There's all kinds of features we'll talk about later, where you can say, hey, if you've got an array of 16 bytes, cool. The compiler knows everything about it. It can do bounds checking at run time. It can do bounds checking at compile time. All sorts of fun things. But if it's not fixed, if it's not a fixed size at compile time, in the C language, you're basically just left with a pointer, which has no information about how large the region is you're pointing to, and that's just the basic type that's available. You have no choice. The reason this is important is because a really common data storage pattern is to have a header with a whole bunch of repeated elements afterwards. And in standard C, prior to C99, you had no way to associate the items that are following with the header. So you'd have to add up the allocation, and then you'd refer to the items that follow the header with a horrible cast to an addition off a pointer that's the wrong types. You're lying to the compiler because there isn't really a second header and you're just doing terrible, terrible things to work around the lack of this. You could have a pointer to the items, and this pointer would point to immediately after itself. So this is a kind of pointless exercise, but at least you now have an association inside that initial header structure that, yeah, you are in fact going to be followed by a whole list of items. So you're still doing the terrible casting. You're still doing this weird iteration, but at least there's an association. What's really wanted is a way to say, hey, I've got an array of these elements, and now the allocation is straightforward. You can iterate them, but what goes in the square braces? And this was the problem long ago. C didn't have any solution to this, so people lied about it. They said, I've got an element count. I've got an array that there's one element in it, because, of course, zero is not a valid size of an array in standard C. They'd say, I've got one element, and off they went, and continue to use many elements off the end, way beyond the single element. This had all kinds of problems that we're going to talk about in a second here. And in 1990, the GNU extension said, okay, we'll allow zero length, because at least we can use this as a notable extension. Standard C doesn't allow it, so it's a distinct feature that will give us the ability to solve some of the problems with the fake one element array, flexible array. But this also had all kinds of problems, because you're still lying to the compiler. You said, I have a size zero array. And you go, well, is it really? No, it's not. So 1990, we get C99 with an official flexible array member, which is just empty. So at least you're not lying to the compiler directly anymore, but you still have no idea how big this is. And then even worse than that is, since we've had 50 years of horrible hacks working around this, there are cases where people had a fixed size array at the end of some structure, and they said, you know what, this actually wasn't big enough. We're going to make it dynamically sized, but we're not actually going to refactor any code whatsoever. We're just going to pretend that that number that isn't one or zero is just totally a lie. So we're going to ignore it completely. You can talk about problems with existing workarounds. Yes. So I'm going to talk a little bit about the issues we have with one-element arrays and zero-layer arrays in particular. So the one problem with one-element arrays is, well, that one element. So whenever people need to make use of the size of the container structure, they need to be acutely aware at all times that they are also carrying with it the size of that one element of this array. So that's really problematic and because, well, it is going to force to the developers to always pay attention to any place where they need to compute either the size of the container structure or the size of the one element and see if they need to subtract from that size either one in the case of a variable that holds the total elements of our array as in the case of the line of code at the bottom or, well, any other case that the English this size, the size of this one element can be considered spurious, which is basically at all times except when we need to allocate a space in memory for our container structure and for our array. So here, well, we have an example of the declaration of a one-element array inside a stroke ancient. In this case, I decided to call this stroke ancient merely to illustrate that, well, this is the all way of doing this. So we don't want to do this anymore. So, yeah, you shouldn't do this anymore, too. And another problem with one-element arrays is that, well, you might know that we've been trying to enable array bounds for more than a couple of years now. And, well, if we enable array bounds, we are going to see a lot of false positives because, well, array bounds, what it checks is that we are not accessing our array outside or outside the boundaries of the array. If we declare a one-element array, well, the only valid index that we can access our array through is going to be zero. So that is not the case when we are using this type of array because the idea is that around time, the size of this array is going to be larger, right? So, yeah, chances are we are going to try to access this array through an index greater than zero. So, yeah, we've been fixing a lot of false positives trying to enable array bounds. And, well, this is an example of the type of warning that you're going to see if you're running to this issue. What's great about this is that, well, array bounds has been detecting some actual bugs. And, well, we've been fixing those. And, well, we're about to finally enable this option. So the problem with this is that in recent times some of the false positives that have been reported by the compiler are actual problems with the compiler code. So that's been delaying the progress in this work. Okay, so what are the problems with zero-length arrays? Well, they are slightly less problematic, but still something that, well, first they are not part of the C-standard, right? So another thing that we need to be aware of is that we have detected some code where developers were applying the size of operator to this type of array. The issue with that is that, well, we are always going to get zero as a result. And what we have seen is that they were trying to use the result of this operation, which is always zero, in other operations like multiplications, maybe they were trying to get the total size of the array around time. And, well, that's an issue, so we had to fix that. And, well, I have an example here of how people usually compute the size for the allocation of the container structure in the zero-length array around time. This is a common idiom. Okay, another problem with this type of arrays is that sometimes people can introduce problems like undefined behavior inadvertently. So in this case, I have here an example of a patch that added a new member to this structure after the declaration of a zero-length array. So the problem with this code is that around time this array is going to be used as a flexible array. So this is as an object of variable length, right? So the size around time is going to be much greater than zero, of course. I found this code, and, well, of course, here the easy fix is, well, we just move the zero-length array declaration again at the end of the structure, and that would be the fix. But if we also transform this array into a flexible array member, now the compiler is going to enforce this behavior. So the next time that someone comes and tries to add a new member and made the same mistake adding a member just after this array, well, now the compiler is going to complain. And that's always great because we are becoming the compiler our ally. And in these cases, well, this is something, I guess, we should always strive for. So, of course, this was the solution, right? So just move the array at the end of the structure and transform it into a flexible array member. So this was the kickoff for the flexible array transformations in the Kernel Self-Protection Project. This was the moment when we realized how important it was to transform this array. And just to mention that this both was introduced in 2011 and we fixed it in 2019. Here I have another example. This is interesting because what happens here is that the developer, originally they had in their code an array of 18 items, right? And then they wanted to transform this into an object of variable length around time. So they decided to transform this array into a one-element array. So they even added a comment, right, with the intention. The thing is that they also had this structure where they declared a couple of members of the type of the structure containing the one-element array. So the problem here is that if we... Well, if they tried to use this array as a variable length object around time, they are going to run into the same issue as the previous example. So they needed to move these declarations, at least this one, at the end of the structure. The others are fine because they are pointers. Another funny thing to notice here is that, well, the developer transformed a pointer to a type of this structure into a pointer to void. So that's obscure. So we really don't want to do that. But anyways. Okay, so as I mentioned, they forgot to move the declaration of this member at the end of this structure. And well, I was doing some work and I ran into this one-element array. And when I transformed this into a flexible array member, it was when I noticed this problem. So what I did was, well, I transformed the flexible array, the one-element array into a proper C99 flexible array member. And then, well, I moved the declaration of this member from the middle of the structure at the bottom, at the end of the structure. And with that, that issue is fixed. And well, just to mention, this bug was introduced in 2017 and was fixed in 2020. And well, this is another interesting case. Size of is going to return, of course, different results when we apply this operator to all these different variants of declaring a variable length object. So of course, if we apply size of to a one-element array, we are going to get the size of that one element. If we apply size of to a zero-length array, of course, we are going to get zero as a result. In the case of a flexible array member, a flexible array member is a variable of incomplete type. So in that case, size of is going to return error. So we need to be aware of these two. And this is another interesting case. This is an example of code. Here I'm showing code from BSD, where we have an array of concrete size in this socket address structure that is going to behave as a variable length object. So our array is going to be from 14 bytes all the way up to 2,255. So this is a couple of months ago, this was the reason why compilers couldn't reason properly about the sizes of trailing arrays. So this is something we are going to talk a little bit about later in the presentation. But this is an interesting case, too. So while there are mitigations that we can use in the compiler, we've got array bounds, which will tell us all kinds of things in compile time and fix them permanently. We've got the sanitizers that will do runtime bounds checking and says, hey, I've got a fixed size array. I don't know yet how much I'm going to be using or where I'm going to be indexing or how far I'm going to be copying. And at runtime, we can check the index or the offsets. And then similarly, the built-in, built-in object size, built-in dynamic object size provide similar checking for sort of fortified stuff like mem copy, string copy. But none of these work for trailing arrays, whether the size is specified or not. And so the problem here is if you've got an array in the middle, no problem. We're protected. Mitigation's worked. That's great. If you have something at the end, the compiler just completely steps away and says, I can't know. Code from 50 years ago has been doing insane things for so long. I cannot reason about this whatsoever. And then there's one where the size is specifically unknown. And it's also trailing, so it's not protected. But we want to have protection of something that actually the size is known. So in GCC 13 and Clang 16, strict flex arrays option was added, which basically says turn off all the insanity. Don't have any of the weird workarounds and other stuff. If you specify the size, it is using that size. Just done. And if you need a dynamically sized member at the end, it's got to be a C99 flexible array. So now we're back to, it's not about whether it's trailing. It's about whether the size is known. So if it's in the middle, it's at the end. If you have a specified size, you're done. Mitigation's actually work and apply. So now we've still got this problem of what do we do with unknown sized objects coming back around to the weakness in the C language itself. So the compiler feature that's being worked on, currently called element count. It is likely it'll get renamed to counted by or something, but the idea here is in most structures that have these kinds of trailing arrays, there is some other member within the structure that is used by the logic of the program to determine how big it is. You know, you're going to have a for loop that walks through every array element. You're going to have some counter that says what the maximum element is. Another way to specify, to hint to the compiler, hey, look, here is the actual size. You know, here's so many elements I have. And this actually gets us the point of being able to add the sanitizer protection, add this logic to the built-ins where we can actually check at runtime the size of this array. Okay, now let's see how we are, well, how we are transforming these arrays. Okay. I'm going to talk about the general case of one-element arrays and zero-link arrays. So, this example is, to me, is the most benevolent example I can show you. In this case, well, we have a stroke foo that contains one-element array of type, the element type of this array is going to be a stroke bar, right? And well, we have here, we are allocating memory through KM-alloc for the whole structure and a number of elements for our array. If you notice here, again, we are subtracting one from count, which is the variable that is going to hold the total number of elements in our array. And the reason for that, again, is because the size of the one element is already included when we apply size of to a star P, right? So, we have to compensate for that size. And well, we are going to do some things. We are going to copy some data into our array through main copy, and then we're going to iterate over our array, and that's it, right? Okay, how we transform this? Well, the simple solution is just we remove the one from the declaration of the one-element array, subtraction from count, and that's it. That is the solution. The sad thing about this is that maybe this is 1% of the cases that we have in the kernel. The real story is more complicated. We need to audit instances of size of when it's trying to get the size of the whole structure through, in this case, star P. We need to audit any instance of code when we find size of applied to the array. When we find size of applied to the type of the structure that contains the array. And of course, when we find instances of size of applied to the type of the element of the array. We also need to identify which is the variable that is going to hold the total number of items for our array, and try to look for instances where, well, we are subtracting one from this variable. Okay, but what if we don't find, in this case, count minus one, and we only find count. Is that intentional? Was that a bug? So we need to read a lot of code and try to determine what was the original intention. So, yeah, in some cases, we have found that the code, the original code already contains bugs, and we have to fix it. Also, what is quite interesting as well is when the type of our array is subsized one byte. As it could be, we declare our one element array of type U in 8 or char. In this case, people just subtract one from any of these size of operators. Yeah, we need to look for instances in the whole code, well, in the code that concerns our array, of course. Instances of minus one. So, to try to determine if that code is correct and if we need to remove that minus one, if that minus one is correct, so, yeah, it's a lot of fun. Lastly, we need to find instances of code where the structure that contains our one element array is a member of another structure, and we need to see if people is computing the size of that other structure and how they are computing that size and if we are missing, oh, well, if they are taking into account that they need to remove or to subtract the size of our one element array that is contained in this other structure and so on and so on. So, yeah, it becomes messy in reality. So, this is the reality of these transformations. We need to look for all these cases and try to make sure that we are actually doing what needs to be done. In the case of transforming zero-layer arrays into flexible array members, that's more straightforward. In this case, well, we can simply remove the zero from the declaration and that's basically it. However, we sometimes break user space and this is something that we are going to see. And, by the way, this is the script, the coaxial script we use to transform the vast majority of zero-layer arrays into proper C99 flexible array members. So, you see that it is a fairly simple script. We just identify the structure containing this array and remove the zero from the declaration and that's it. And, well, we also have the cases where we find these arrays in juniors. So, when we want to transform either a 1NM array or a zero-layer array into a flexible array member and that array happens to be in a union, the compiler is going to complain. There's no clear reason right now why that is the way it is, because, well, we could have a zero-layer array in a union and that's totally fine. Apparently, it's a definitional problem that probably is going to be fixed in the future. So, well, in this case, I have an example of one of these instances of code where we have a union, we have a zero-layer array and what we need to do in this case is just use a helper that we have for these cases. So, whenever we need to transform one of these arrays into a flexible array member we can use the declare flex array member. So, the declare flex array helper. This helper is useful for declaring flexible arrays in unions and also alone in structures, which is a case we have found. Okay, now, this is an example of how we've been doing all... how we started to do these transformations in UAPI. At the beginning, well, what we were doing was we were duplicating the whole structure into a union. So, this is because we cannot simply transform the one element array if it is in UAPI because user space is going to continue using that member, that array. So, we cannot just remove and modify UAPI in that way. What we need to do is we need to add a new member that is going to be a flexible array member and that member is going to be used by kernel space and the one element array is going to continue to be used by user space. So, this is an example of how we were doing things at the time. Now, with the help of the declare flex array helper, we don't need to duplicate the whole structure. We just need to include the one element array in a union together with the declaration of our flexible array member that is going to be used by kernel space. So, the code looks much better now. And, well, this is a case where someone from Android reported me that, well, I had broken user space through a chasing UAPI. So, what happened here is that the compiler is reporting that we have a flexible array member not at the end of a structure. As I have explained previously, when we were touching the case of undefined behavior due to the addition of a new member to this structure containing a zero-leg array, the zero-leg array was in the middle of the structure. So, if we modify that array and change it into a flex array member, now the compiler was going to emit this same warning. So, this is what was happening in user space. The code that introduced that bug in UAPI, well, is this. I send, at some point, I send a three-way patch to UAPI to replace all those zero-leg arrays. And, well, it happens that this code was being used in user space. And, in particular, in this structure. So, this code is user space code. So, here we have a couple of members declared in the middle of a structure. And the type of these members is the type of this structure in UAPI. So, yeah, now we have a couple of members of a type of a structure that contains a flexible array member just in the middle of a structure. So, that's wrong. We need to modify this. The problem with this is that there are a couple of members, not only one. If it were only one, well, we could just move that member to the end of the structure, and that would be the fix. But, in this case, I was honestly freaking out. I was like, oh, my God, I just broke user space, so Linux is going to kick me off out of the kernel community. But, yeah, the easy solution here is just to transform these into pointers. And that is what I proposed at the time, and that was actually the solution. So, yeah, I survived that. So, as we go through and get all these into actual flexible arrays, then we're in the position of actually being able to add more information about their runtime size. So, annotating things where we can about the size of allocations as possible, the alloc size, a hint to the compiler. Generally speaking, this is easy because you can just add the attribute to the end, specify which argument contains the size and bytes, and off you go. The tricky bit in the kernel, of course, is that we have lots and lots and lots of specialized allocators that do different things, that are wrappers around other things, or runtime fixed size allocations like the Kmemcache alloc. There's some problems in here, so it is somewhat limited in its use, and attributes get lost across inlines, which is a whole other bug in GCC. But it does catch real things. So, you know, if you perform an allocation, let's say here you've got your count on your alloc, and then you have a bug in whatever you're doing to access that array later, before this wouldn't get caught, and now with alloc size you can actually see, oh, the size information is actually available here on that indexing, so the sanitizer can catch this. Of course, if you return from this function, that size information goes away, but that's what we're hoping to fix later on here. And so internally, also, in addition to the indexing size information, you can use the built-in dynamic object size to find out the actual size of this thing due to the alloc size hinting in that function. So the next one, which will get us much, much wider coverage for runtime size, is adding the counted by attribute. So normally, this is, again, pretty easy. Structures have something that tracks it. Look, template and number templates. It's actually right there. It may require humans to look at it.  So the built-ins will work, and the sanitizers will work. And you can actually find a bunch of these automatically. This is another Cox & L script for adding counted by. The pattern is you want to find the allocation where it's using the multiplier of the actual count followed by an assignment to a member of within that allocation. And then you can basically take that information, find where that structure was defined, and then add it in automatically. I've got a series that finds about 160 of these in the kernel with no special care whatsoever. It just finds this pattern. It's a really common pattern. There is some more compiler work that's sort of outstanding. Ongoing work in GCC and Clang. We still got this problem with dash W array bounds in GCC. GCC has a really interesting and effective way of tracking variable, like the range of values that may be assigned to a variable at compile time as it's going through as part of its analysis phase. So we can actually specify, hey, looking at all the paths to this one place where you index this array, I can see that you're going to be out of bounds under some condition. I'll throw warnings about that, which is really helpful. It's a very powerful tool. Unfortunately, it has bugs, and we've been fighting these bugs for quite some time now. With each release of the kernel, Gustavo and I have had all sorts of fixes landing. We're like, okay, we are warning clean. We are good to go, and then Linus says, oh, the development window is about to open. I will update to the latest Fedora with the latest GCC that has new false positives, and then I'll apply all these things and reject the fact that we can turn this on because now there's new false positives. He's done this two releases in a row, at least the second time he apologized to us. So I am foolishly hopeful that the last bug in GCC for this is a problem of jump-threading optimization, and once we get that fixed, hopefully again we can turn on dash W array bounds. We also have a, there's a problem with nested flexible array structures. Gustavo talked about this, if you're trying to count the one element array that's in a structure, and some other structure includes that structure, you end up with this nested series of structures that ultimately end in a flexible array. And GCC and Clang both, if you ask the built-ins, how big is the structure, like the internal structure, it says, I don't know, it ends in a dynamically sized thing, I can't know its size. But if you ask it, how big is the structure that contains this structure, it says, oh, it's exactly the size of those two structures without any, we'll pretend the flexible array doesn't exist, which gets confusing if you are trying to target something in a couple, in a sub-member of a structure. So changing the visibility of that is ongoing in GCC, we're gonna get that in Clang too, but there's some, since it's modifying the GNU extension of how that stuff gets processed, we're sort of waiting for it to be finalized in GCC before Clang follows that behavior specifically. There's also some questions about how the sanitizer works for bounds checking of arrays versus arbitrary object-sized checking, which is a kind of wider span of things to examine, but the latter, the object-sized sanitizer has had a lot of code gen issues, like making images really big and didn't seem to provide any coverage that dashed array bounds didn't already provide at runtime, like array bounds would do it at compile time, but then the object-sized sanitizer would do the same checks at runtime, which was unnecessary and redundant. So we removed it, but there's some question about whether or not we're gonna need to bring that back and fix it to work better with the coming annotations. And then of course, coordinating the counted by or element count or whatever it's gonna be called in the compiler. That one's ongoing, there's active coordination between Clang and GCC on that, so I'm hopeful that'll get resolved and published soon. Let's see, and I promised numbers. So this is kind of hand-wavy, but this was the last four years of refactoring to use flexible array members. This isn't gonna be a super precise graph, but it does capture the sort of the general sense of the work that needed to get done, and this starts back in like the 5.2 release where Gustavo was talking about that initial realization that, man, we're having bugs with the zero-size stuff, we gotta fix this. And then the work started to start the refactoring after going, you know, there's actually a lot of different things that depend on getting proper C99 flexible arrays used universally in the kernel with all the fake stuff gone. And there's sort of a bit of a flattened COVID area and then sort of tree-wide changes and then it's continuing. And we're basically close enough now that we're gonna be turning on the strict flex arrays things, which will change CodeGen and make a lot of other, make any remaining bugs pop out. We've had some long-standing stuff that we needed to fix first. We normally think of the kernel as being the ultimate upstream. Everyone else is downstream from the kernel distros and everything else, but actually the kernel is downstream for a couple of different projects like ACPI, CA, which has its own thing, and we just copy it directly into the kernel. But of course, it, being an older code base the kernel had many zero and one-length arrays scattered all throughout it. So getting that all cleaned up first was required before we can turn on the strict flex arrays because the kernel wouldn't boot because it's like, oh, it's a zero-sized array. I guess there's nothing else in this ACPI table. So the other metric that's not perfect but it's interesting to look at is looking at mem copy bounds checking so that using those built-ins as opposed to indexing of arrays and looking at that. So for an x8664 def config with fortify source enabled in 6.1 we had about 46% coverage. You know, you'd actually perform good bounds checking. And that was without alexize, without strict flex arrays. In 6.3 alexize is enabled, so we got about 54% coverage and I did a build with 6.4 RC1 and I forced strict flex arrays on and we got about 56% coverage. So my joke on this one is over the course of five months we've gained 10% coverage so in March of 2025 we'll have 100% coverage. Which is not true, I'm sure we'll hit 90% coverage very quickly and then spend years trying to get the last 10%. But I'm really hopeful that when we add support for the count-by attribute we're going to be able to convert a lot of these unknown, right? Which are the ones we can't mitigate. We convert unknown to dynamic and we have the actual bounds for all the mem copies, all the indexing and everything that we're doing. And I think that's it. Any questions? Thoughts, concerns? Yeah, maybe I missed it but I think I remember hearing that there are problems when you had a fixed array size which was a lie and the classic one of course is BSD SOC Adder in BSD SOC Adder games which of course must have been a really, really good dose of LDS at Berkeley. How does that get accommodated vis-a-vis UAPI and strict flex arrays equals three? Yeah. Thank you for your Star Trek reference. So what's interesting about that, the SOC Adder situation is that it was always a problem. Like making that lie created all kinds of chaos everywhere for every project that was using SOC Adder. And the kernel solution was actually to make another thing called like SOC Adder storage which is actually fully sized to the 255 max. And in most cases all the internals are already using that in most places and don't care and everything's fine and you have this weird interface to UAPI where everyone kind of winks and says yeah it's 14 bytes, sure sure and everything works because they've been fighting this for since SOC Adder decided to make that change. Inside the kernel though there's a passing of just a SOC Adder pointer and saying it's a SOC Adder pointer and people have to cast it to whatever protocol and figure out whatever it is. So that one has been painful to sort of deal with and a lot of those have been found by sort of turning on the sanitizer in warning only mode where we don't reject anything but we go what are you doing? Well this is bad but there was a large patch set that we landed for NFS a bunch of the NFS internals needed to be fixed to not trip the compilers checking, like it was fine it was doing all the right things it was just like it was lying to the compiler about what it was actually trying to dereference and you had to find all the places where you had to say no no it's not actually SOC Adder it's SOC Adder storage you do actually have 255 bytes dealing with that. So that's sort of been ongoing work which it's been a little painful to say the least there's also been issues with file systems XFS had a lot of similar one element stuff that went back and forth but SOC Adder was by far the worst of it because that was a very intentional we're just going to straight up lie to the compiler and move on and not refactor anything so huge tech debt there but for the most part that was one of the only serious offenders and what was so terrible is there's all these places where you just happen to have a structure that ended in an array and the compiler had to say I don't know about this this could be just like SOC Adder I can't touch it anyway I saw another hand what is the process going forward to ensure that new changes don't introduce these old styles is the like strict flex arrays option enough it's enough to make the kernel not boot and do other terrible things this is a place that I would like a little bit more help from the compilers on but I've sort of been picking my battles like can I get the feature that gets us the code gen we want first and then we can get warnings later so GCC has an option called dash W zero length arrays which will warn about finding a definition of a zero length array which would be handy because hey don't add those but it doesn't catch one element arrays which are usually unsensical there are strictly speaking legitimate uses of that but they're weird but we can't actually use that in the kernel because of all the UAPI that we can't change so we have all these definitions of zero length arrays even if the kernel itself doesn't access the array through that member name so what I really want is a dash W fake flex array access where it says oh you're about to do something with the thing that has a definition of zero one size and that'll keep it out there are some kind of hand wavy tools that we can use like check patch to say hey it looks like you're adding an array of zero or one size don't do that but the strict flex arrays will definitely cause chaos if you try to use it so I want to get those warnings but we don't have a good answer yet thanks I'd like to ask you which would be the faster and better to check all these sloppy code and to fix it versus change the safer languages like Rust I like to think that we're trying to peel away as many of the ambiguities of C as possible using less and less the C language that's dangerous while other people are working on getting Rust in from the other side my expectation is we end up meeting halfway where we have the best we can do in C and things start coming in on the Rust side but the way the kernel development process works it does not support kind of revolutionary change you can't just come out and go hey we've just replaced all the file systems with Rust it doesn't happen we have to incrementally make changes so I think as Rust is coming in at the periphery we still have to do our best effort to try and fix C where it is because it's going to be a long time before we get everything into a memory safe language but my thinking is they're not incompatible like we can use the C and the Rust and well it's good either way I think we're also at time awesome thank you


And we're back for a live on a given Tuesday, I'm Jay Fiedel. This is Think Tech. And the handsome young man is Adam Kat. Hi, Adam. Hi, Jay. You're joining us from Denver to talk about your book that you wrote, Life on the Grocery Line. This is an unusual book. It's very autobiographical. And my guess is that it's available for sale on Amazon, am I right? Yep, it's on amazon.com. All right. So you wrote this about your own life. So before we get to the book, let's talk about your life. What were you doing that made you write this book? Well, so in 2019, I decided to take a break from corporate life. I was in a bad situation, and I wanted to take some time off. So I quit in about, I think it was August or September of 2019. And to cash out my 401K, took a few paychecks and wrote out the rest of the year to work on a novel that I've always wanted to write. It's something that I am passionate about writing.  So I kind of wanted to just take that break and enjoy some time off. And so it came to the end of 2019, and I was pretty broke. Like I had some money, but I needed more. So I started working at a grocery store. So it could be like a mental break, but like a physical, like you might be physically busy. But so that was in January of 2020. And then by, I mean, by March of 2020, everything changed. You know, like it was, I think it was March 15th, the weekend of St. Patty's Day that schools closed. And businesses started to shut down. And like my job went from just kind of casual fun. I thought of it as fun anyway, that like I would, you know, joke around with people and just check them out, you know, check out groceries and hang out. And it turned into something else. I became like a therapist sometimes. There was plexiglass and masks overnight. So all of a sudden, all the fun of communicating with people went away and it turned into a very isolating and confusing job. There were so many people so upset and scared, and it's still confined in you. So I decided to start writing all the stories down on a blog called lifeonthegrocheline.com. And over time, I collected those stories over the course of the summer and into all the way into this year and put them into a narrative and created a book called life on the grocery line, front line experience in a global pandemic. So it's almost real time because you were writing a blog almost real time. And then you put the blog stories in a book and now you have a book that's normally biographical but current at the moment of the story anyway. Yeah, it was definitely happening in real time. It was a really interesting, and I turned it into a narrative that's more fictionalized because that's the easiest way to explain the story and to present the needs that are present the narrative and the things that were going on at the time. But yeah, it really resembles my life and other people that I worked with. Well, I wanna get into that, but before I do it, my question is why did you A, write the blog and B, take the blog and make it into a book? Why did you feel the need to go public on this? Well, you know, writing is my passion. It's what I always, or what I wanted to do the last 10 years. And I- So you went to school for it? I went to school for communication. So I just went to college because that's what I was supposed to do. It wasn't really, it wasn't a writer then but I began to pick that up as I went through college. I think it was the best way for me to work through the stress and the uncertainty of the times. And to share it publicly is my hope that other people would connect. Like I know that when someone writes something that I connect with it makes me feel easier in the world. It relieves anxiety in a way that someone relates to you that you may never know. And that blog really turned into a community of sorts. People were sharing stories with me, telling me like about their fears and anxieties about their family members that worked in the industry. And I like, you know, it helps bring about a community and it helped bring happiness to certain people. And that like, that made me think that, you know, maybe I should make this into a bigger story. I should tell the story about this time because it's unprecedented in world history really. We didn't expect this to happen. So it definitely needed the story. People from the work through the grocery industry during the time deserve have their story told. So I thought maybe since I'm living through this and I got nowhere to go, I can't go to another job because there was no one was hiring. There's nothing like that. So figured I'd turn it into a book and see where it goes. Well, let's take a snapshot of say March and the spring anyway of 2020. What was it like in a grocery store? You know, because I mean, people outside of grocery stores were wondering whether there would be food on the shelves, wondering whether the supply lines would hold up. And of course the people in the store were, you know, you say that they, the customers talk to you sort of like a bartender, right?  At the same time, I recall incidents where customers would harass people in the grocery store would act out against people and other customers. So can you describe for us the environment that existed at least in your grocery store in the spring of 2020? Yeah, so it like, I mean, the shelves started to get empty right away, right? So rice, toilet paper for some odd reason, right? And paper towels were all gone, but canned food, frozen goods, it was so bare and dystopian looking like even the individual drinks were gone. And I worked at a high-end grocery store once they had the name, but like it was definitely, you know, in a very affluent neighborhood. So I had that kind of clientele too who expected certain things out of their local grocery store. And it was intense, because I feel like a lot of people didn't, like they never really had dealt with their life in a real way, like having their kids stay home with them and they have to all of a sudden take care of them all day and they have to teach them online and help them teach, like go through their homework and do all these different stresses. And it was so intense. It was like for a while. And some people were really nice, but yeah, we had a fair amount that would like flip out or start crying. One lady in particular, I remember, so I was checking her out and we were running out of bags along with everything else because we were so busy. And she asked me if I could double bag her groceries. And I told her, we can't because we weren't supposed to at the time. I knew immediately that that wasn't gonna go well because you could see it. She started grabbing things off the conveyor belts. She grabbed the bag out of my hands, ripped it out of my hands and she was throwing her groceries into the cart and she even missed some on the floor. And as she's storming out, I'm watching her do this thing and like kind of in awe or shock and she stops at the last catch register, licks her hand, lifts it up towards the sky, says something to me and smacks it down on the counter. And I knew right then that like people were so close to the breaking. Some people were. That was in May, I believe that that happened. April or May. And it all came home in a very real way. I remember I didn't take a break and at the time you almost thought like, is that like a biohazard or something like that? It was sketch and everyone was at the breaking point and you just can't as a grocery store employee just kind of had to take it and keep going. Yeah, I must have, did you lose staff in that period? And people say, I don't want to come in here. I don't want to deal with this. I don't want to deal with customers that are losing it. I don't want to deal with the risk of getting COVID myself. You know, it wasn't that we lost staff, but they had a, they have a attendance policy that you can only miss a few days. Well, they got rid of the attendance policy for a while. So a lot of people would call in and that would definitely short staff us all the time. We were extremely short staffed. Like on top of everything else, we didn't have enough people because, you know, I understand it's stressful and you needed extra days off for, so yeah, it piled on. But we, I think everyone's stuck like stayed with it because there weren't many other jobs out there, so. And there wasn't much money for some people. I mean, the disadvantage, I don't know if you're high-end store service, the disadvantage, but, you know, if I don't have any money, that's going to reflect on the food I buy. Did you see that happen? Did you see a trailing off of business? Did you see credit situations where they weren't able to pay? No, my store specifically, I didn't see anything like that. It's definitely the nicest neighborhood in, or not the nicest, but maybe the ritziest neighborhood in Denver and it, people had carts piled like above the brim. So you're talking about like $500, $600 worth of groceries. And a lot of it was perishables.  It was like hoarding at a pretty scary level. And luck, one of the nice things about working there is that I could get stuff after hours and like we get it from when we get a new shipment in, you could get stuff to just cover to you for a week. They stockpile a little toilet paper for us so that we could have some because you couldn't get it anywhere. I never saw any like people missing out, but I did see like this fear in people's eyes. You have that kind of look when you've ever been in a hospital where someone's been all up all night worried about their loved one.  And it didn't matter, you know, rich, poor, like we didn't make, I didn't make much money, you know, the minimum wage in Denver is $15 an hour. So that's what I was making. And, you know, we were all, it was a great leveling experience in a way. You were very much on their level a lot of times. And then, you know, other ones break you or ask for ridiculous things, but it was fascinating that way. And when you think about it, you know, people are isolated at home.  So you become their life experience outside of the isolation. And these are the moments of their life when they're actually interacting with other people, otherwise really not. So I like to get a handle on the dynamics. And that means, you know, from the time it first started in March, April, May of 2020, you were there, what, maybe a year after, for a year later. How did it evolve? How did it change? Did you continue to see the bags under the eyes? Did you continue to see the outbursts? As the pandemic wore on, everything just kind of settled back into the strange normal. Where, like, how people were calling us heroes at the beginning. I was. Yeah, you know, like I never thought of myself as a hero and I know no one I worked with did. It was kind of a running joke inside, but I understand it comes from a good place. And I know that people really appreciated us being there.  You know, just having someone to talk to, someone that even for a two minute conversation, they went a long ways. And as the time, like the lockdowns and things wore on, I feel like it was more people, they just lost patience quicker. Like at first everyone was like, could be really nice at moments and patient with you.   So I feel like I'm in a bubble away from everyone. And in no way, I can make connections like I would want to. So that's what I saw the most was just it wore on and it wore down everyone. And I was very grateful to get out of that situation and go into the inside of the store. Yeah, enough is enough. But you know, it strikes me that at the beginning, we're all in this together kind of mentality that changed somewhere along the line. And it became politicized and people didn't want to wear masks. And I recall seeing a number of articles in the newspaper about altercations where, you know, a retail clerk in some retail establishment would say, you know, you need to wear a mask in here and the customer would get into an argument or a fight about it. And it was really awful to see that. Did you have that experience that happened in your store? Yeah, you saw it with certain people. I remember this one man came in, this older gentleman and he like, this was right. We hadn't got masks yet, but a lot of people were coming in with it and we hadn't got plexiglass. And he was, he stood as close as he could in the checkout lane, like the self-checkout. And he was kind of yelling at me about how my CEO wasn't treating us properly or our company's not taking care of us. And he sat there just breathing heavy on me. Like everyone knew that this was an airborne virus, but like we were not getting all, we hadn't all the safety things in check yet, they hadn't been in place. And he just stood so close. And I just remember him like bearing over me, telling me something that I have no control over. And it made me like think, you know, he's so used to like this having control in his life that this loss of control, he was like basically projecting on me in this moment when he should not be this close. Like we don't know anything about the virus. We don't know how this works. You should not be breathing all over me and lecturing me about things. And it was startling because like some people just don't see beyond like what's in front of their nose, you know, and yeah, it was, we saw quite a bit of that. And I eventually just didn't really, I didn't tell anybody to put him on a mask. I wasn't gonna do that. I'm not gonna argue with someone or fight over it.  Interesting, you know, I had an accountant once and you would ask this accountant, what do you do? And he would say, I practice psychiatric accounting. And so what does that mean? Well, you have to take every client on his own merits and you have to look at this person and understand this person if you're gonna do good accounting for him, personal accounting. And I guess I would say that what you describe is a psychiatric retailing, psychiatric food selling, so to speak. You have to look and see who you're dealing with. Oh man, that's so true. Well, you know, during this whole continuum, 20 to 21, we had two significant things. One was the Delta, which I guess came after your time. And of course, you know, Omicron came much more recent than that, you know, people forget, but Omicron is, you know what, it's a month old, maybe six weeks old, that's all it is. And yet it has completely occupied our lives. So my question is, I know you're not there anymore, but I wonder if you have a view or, you know, people who you talk with who are there to describe how these changes in COVID may have affected the environment, the phenomenon that you're talking about in the grocery store. Yeah, I've been on this podcast a few times that call the retail war zone, so I'm pretty connected to a lot of people that still work in there in the industry. And it feels like it's kind of forever. It's gonna be that way forever, but they also, I think, like I know that there's some, we have King Supers here, which is a Kroger offshoot, and they're going on strike, or they might go on strike. And I think like, if anything, people are, the work in the grocery industry are like seeing their conditions and they want it to be better. So they're mobilizing. Now, whether or not it's successful or if it's beneficial for them, I don't know, but like the, I think it's helping them realize their conditions. And it's, I don't think anything's changed for them. It's still just as intense and just grinds on and on. And it's already a hard enough day. I wasn't, my store was so busy. I'd see a thousand customers on a really busy day, just through my line.  There's a lot of things that were there beforehand that COVID only magnified. And now you have two years running of this, that it's gotta be brutal on them. And retail war zone does a good job of like highlighting their day-to-day struggles that they go through and thinking about mobilization and stuff like that. Yeah, well, that leads to a question I was going to ask you. You know, the grocery industry changed and some of those changes are permanent. Now the retail industry has changed and some of those changes are permanent. And I wonder if you can speak to that because you know, we're not out of this yet and frankly, you know, we're not gonna be out of it for a while and when we get out of it, it'll be no better than an endemic, right? It'll be sort of an ongoing infection. So the question is, how does all that you think in the long-term affect the industry? Well, in the very long-term, I can see it's definitely affecting the supply chain. And we've already seen the supply chain issues like globally as a result. I work in supply chain now. I work for a big consumer packaged goods company and you know, our orders are, we're filling it less than 50% on a lot of stuff. Then that's going to big organizations. Like we feed into Kroger in places like that.  And hopefully we don't have another major thing that goes wrong. Hopefully I'm optimistic that it comes back sooner. But those empty, those empty shelves and not having what you want is always gonna affect the customer on the customer level too. That they're gonna, you know, be more upset. Things are gonna be tighter. There's, I don't know if the mask thing will go away. I don't, it's hard to say, to be honest with you. It really depends on how far we get along with everything and like government officials and what they decide to do. I don't know, I think that one of those things that will definitely come out of it maybe as awareness of like conditions of retail workers and grocery store workers that they strive for better or better, try and better their lives and not work at a grocery store forever. I hope those sort of things. And I've seen a lot, like grocery industry specifically is very transient. A lot of people don't stay there for that long. It's probably more transient now than it was before. Nobody in the room is gonna say, oh yeah, I wanna make a career out of this, right? Yeah, yeah, that's been fading for a long time too, I think. I know they just kind of constantly short staff you. Anyway, where I was working, it was always short staffed. I worked in the prepared foods department as a manager later and it was, we were always, we never had enough staff because no one gets paid a great amount of money to just kind of grind it in, grind it out. And I mean, the holidays were kind of cool in a way because it's really like a lot of energy but we were so busy all the time and you beat down for basically minimum wage. So I don't know, the future is pretty uncertain, I feel like. Yeah, well, if the situation continues where people limit their daily activities and they limit leaving their homes, they still have to go to the store and get food. And therefore it becomes sort of a central place and the smart retail organization is gonna have more staff, they're gonna find a way to be better staffed and be competitive. And I suggest that the retail of food in the future is going to be kind of a mecca in the commercial life of the community because that'll be one of the only things where you have a commercial life in the community. Yeah, that was kind of a big revelation for me when I never really thought of a grocery store as that essential to my community in the way that interacted. People were so grateful that we were open. I was grateful that we were open so I could go in and get groceries and then I had a job. And before it's just a lot of times it's just the place you go in and you leave. You don't talk to anybody, you maybe don't even talk to the cashier. One of the things I've been trying to tell people as I've been promoting this book and gaining media is that treating grocery store employees just like they're human. You don't have to tell them they're heroes, you don't have to overchat them up but just that they exist and that, hey, how's it going? Hey, how's it, like smiles, things like that even if you can smile only with your eyes because of the mask, it goes a long ways. It really does, it makes your life a whole lot better. Well, I wanna ask you more about the book. You've been describing certain situations which I'm sure were included in the blog and in the book but can you think of a couple of that were special where it sticks in your mind that this is really the kind of story you wanted to tell that has a special meaning for you? Yeah, so like I said, it was a very fluid neighborhood that I was working in. So there was a brain surgeon that came in and I relate this story into the narrative in the book. He would come in, he had like six or seven kids, I think and he would come in and he ended up in my line like two or three times and then he came in like four or five, about like four or five or six and he'd come in like pretty frequently like every two weeks with $700 worth of groceries or 600 bucks, it was a lot. And he would always talk to me about what's going on in my life. And I told him that I was working on the blog at the time and I told him book story and all that stuff and he was like, that's amazing you're writing a book. That's amazing.  There's probably like 10 of them in Colorado and there's a few hundred in the country, I would say. And he was fully engrossed in like talking to me about life and about all these other things. And it takes a while to check out a huge cart of groceries. So we had like 10 minutes together on a pretty regular basis. And I just, I thought that was so impressive. And it made me like reassured of humans a little bit when you start to get downtrodden, you get lucky. And he was like, didn't have to take the time. He was like an elite person, very elite in so many ways, but he was more interested in my life and my coworkers' lives than he was about his own stuff. So it was really nice. And it will always stick with me for sure. Yeah, so the other side of the equation you mentioned about how people should be kind and reasonable to retail clerks and the like. But it changes people. If they are, if they recognize what you're saying, it changes people, it changes the way they deal with the world. Clearly whether the brain surgeon would have been exactly like that before COVID. Maybe it's a special feature of COVID. But the other thing I was going to ask you Adam is what about your pros?  So if you have the book handy, I hope you do. Yeah, could you just turn to a page that you like and give us a paragraph of it so we can examine your pros? Sure, man, I'll just start from the beginning. Okay. It's my second day at work. The pace is starting to pick up. From the express lane, I look over the aisles and islands filled with food and patrons. The grocery store is a lightning rod of energy and commotion where the world ends and begins in spectacularly mundane fashion. Children are running from their mothers and fathers. In every direction, people are yelling and complaining and laughing. It's controlled chaos in a sense held together by invisible norms forged through evolution and social conditioning. I absorb this curious institution or curious and lively institution of Americana with accidental ease like a toddler learns words. That's hard to keep up.  They see dream grocers prominently displayed in bright orange on my black apron like a beacon to all those hopelessly lost in search of the items they need. Where is your European style braised veal chops with those delicious potatoes? You know the tiny ones? I look at the woman for a moment with wide eyes. She stares back at me, clearly annoyed. I don't know where her item is located. I'm sorry, I'm new. Here, let me ask my supervisor, Alejandro. I don't, don't worry about it. I'll just look around. Before I can ask for direction, she's gone. Just yesterday in orientation, Alejandro told me that my first few shifts would be a flurry of information and sound. The client tell that at this particular location doesn't have patients and they will assume I know what they want before I even speak. You know, the thing about it is I feel that you speak of changes. Changes in the way the customers react. Changes in the way the clerks react. Changes in the way you react. Changes in the supply line, in the way the grocery functions. And it doesn't only apply to groceries. It really applies to all retail. Just a grocery is such an intense example of retail. But it also, it also touches you, Adam. You know, you find that you need to express yourself in a blog and then a book. So I guess my, you know, running into the ninth inning here, I guess my question to you was, how have you changed because of this experience? It was not what you expected. Yeah, interesting. How have I changed? Well, one thing that I realized right after the pandemic hit was that, because I figured my job there is an in-between job. Like I had my draft in my first novel. I was just going to do this for a while. You know, like until I got a full manuscript and I can pitch an agent, do all those things. And I really, I thought of it as a throwaway kind of situation and I don't think I ever really looked at it as a vital part of not only the community and everything, but my life. And as a result and like the daily conversations you'd have of people and the weird like level of bonding that I grew with different co-workers became good friends. And we had this, like you're all, like you're, it's us against them sort of thing, or like you're in this together, but in this, in this together, like much closer to the nerve. It made me appreciate all the like retail workers, the grocery store workers, the forgotten people in many instances, they're forgotten. And society and I hope with the book that people like it connects with them and they can see themselves. It's a dark comedy. I want it to be funny because it should be funny.  And it makes me laugh. Like I'm so, I'm grateful that I went through that even though I wish we didn't all have to go through a pandemic and there's lives lost and there's all this horrible things around you. But like, if you can grow from it and find a reason to go on and connection with people, I think that that's what I got out of it and I hope people do too. Oh, that's great. Did you finish the novel? Is there another book about, you know, business and commerce in you? Well, I have a second book that I'm working on right now, but it's a sequel to this. So it goes into more into the life of Daniel who's the protagonist. So I want it to be about everything I loved and hated about working in a grocery store. So the, like the camaraderie you feel, like how everyone, it's like almost like high school again in a way, but it was also, you know, you get paid for it. It was definitely like a phenomenal experience, but that's where I want to go next. I want to show the world what it's like in retail and what it's worth in our lives, I guess. As much more to come, there's a lot of material coming. You know, we've had a lot of material, but there's a lot coming in my opinion and therefore a lot of content for you to write about either in direct fact or in fiction or in satire. You've got to have a sense of humor. Adam Kat, who has a sense of humor and who wrote this great book called A Frontline Experience, whoops, Life on the Grocery Line. And you can find truth on a grocery line. Thank you so much, Adam. Thank you so much, Jay. I appreciate it. Aloha.


Okay, we have the perfect comment for this. Wait for it, wait for it, and now... Yeah, so team, what are our next steps? Oh. Yeah, yeah, yeah, yeah, perfect.


Romeo, Romeo, where for art thou, Romeo? In her pants. Hey, guys, it's the Idiots. I'm Corbin. I'm Ashley. I'm Rick. And you can fall asleep! Oh, juicy. Freaking juice! It's all over my head. Sometimes you gotta wear gloves. You need to wash! And she grew, look at this. Five feet tall last time we saw her, six foot one now. It's true. And she got a new job, so that's why she hasn't been here as much. Okay, we'll get in here some more. I'll figure it out. The job is the important thing. Anyways, but today... Oh, and you're probably thinking right off the bat, hold on one second, where's Alexis? Because Ranveer was in here. Yes, it's true. She wanted y'all to know two things. She knows that she doesn't have much to say, that's her words, and that Ranveer is beautiful. That's an undisputed fact. Yeah, she watched it with us. Well, let's use two cents. Yeah, let everybody know I think Ranveer is beautiful, but wow, wow, Major Shah, second, third, and fourth. Yes. But we reacted to Ramlyda, or I can't pronounce the entire name of it. Golyanke Roslyla. Yep. Golyanke Lila Vlade, Lila Vlade. I'm gonna get up in. That was really good. I'm glad they sang it and not you. But obviously 100% spoiler review. Go away if you haven't too, thank you. Come back and watch the review. And it's obviously a Sanjay Lee Bansali written, directed, produced, and edited. And he did the score, and part of the score. Yeah. Uh, I wouldn't have- We did a lot of- When the credits were going on, I was like, this man just doesn't like anybody doing anything. He's a controller. Like, this is mine. That's Corbin Riles making a set on how I would be. He would direct it with edit it. He would do the score. He would do the cinematography. He doesn't want to leave it up to anybody else. He'd do craft services. Yup. Yes, a modern adaptation of William Shakespeare's Romeo and Juliet with an Indian twist. The film focuses on the story of Ram and Leela, their love, lust, and the drama afterward. It's true. It's true. That's what it's about. It's actually a pretty good synopsis. Yeah. It's a William Shakespeare of Romeo and Juliet with an Indian twist, starring Ranveer Deepika, and say her name for me, please. She deserves all the credit in the world. The Priya Pathik. Pathik. What? Pathik, right? Yeah, Pathik. She played Ba. Yeah. Yes. The Leela's. The Dawn. Yeah, the Dawn of Leela's mom. I don't know who she is. We'll talk about her. I don't know who she is. If she's a legend, if she's not a legend, she sure comes across on screen like a legend. Does it mean anything if she is or isn't, but she should be. She is in this film. We'll talk about her. Because she did. So amazing. It started with just, first of all, overall impressions. What did you think about the film as a whole, Ash? It's beautiful. Yeah, of course it is. Sanjay. Let's just talk about that, for real. You start a Sanjay film and you're just like, okay, here comes the eye candy, man. Just let this, it's going to be gorgeous every time. Lighting the everything. The slow-mo used in certain situations. So pretty. Yeah, that man knows how in a similar way, there's certain directors that are very stylistic in their choices. Right. It feels like they're films. Yeah. They're films and his style is just utterly beautiful. Like, what's his face? Extravagantly beautiful. What? He directed the beautiful one with the monster. Oh. Oh. In the shape of water. Yeah, what's his director's name? Guillermo del Toro. Guillermo del Toro, thank you. He's a very stylistic director. 100%. He looks and feels like a Guillermo del Toro film. He is similar in the fact that it's beautiful, but it's more dark, beautiful. Yeah. Vivid, beautiful. Yeah, but it's a great comparison because, yeah, Sanjay is a more, he's a happy beauty. And Guillermo is a dark. Not, and I don't put Guillermo as an unhappy. No, just. Oh no, he's very happy. He's a very happy, if you don't know Guillermo del Toro real well. He's a happy dude. It's just historic, he loves his mom. He's a beautiful director. He's a beautiful director. It's not about him. But Sanjay is just, Sanjay Sanjay, it gave us what I expected from him as far as the visual aesthetic. The pretty. It's just gorgeous. Also the, I know we reacted to at least three of them. The songs in this were so beautiful, so fun. Yep. And the dance, like the choreography that you've got going on with all of it. He went on to do a full-on Bollywood, big, huge dance numbers. And let me tell you something. When Tana started it in, right? Yes. And he came in, which we knew would be his entrance.  And second of all, because we've gotten to know him, we were watching the film and I was like, this movie is just, he didn't have to do a thing. Ranveer was being Ranveer. She's like, hey, here we go. And if we had seen this before Gully Boy, we wouldn't have only talked about Ali Abad. No. Because we would have recognized the stretch, because this was Ranveer. This is who the guy is all the time. This is where he became not this specific film, but this is the type of character he became famous for, similar to like Heath Ledger. Right, because it's him. This is pretty, he's a clearly beautiful man. Very pretty man. And knows it. Yes.  But he's a beautiful man and he, the characters weren't as deep as they were in like Badmavad or Strami or Gully Boy or whatever, but that's where you got to start. Right. And so it's similar to like Heath Ledger. He had to play those roles until he can get into his, and it's not saying this is not a meaty role, this actually had some really good moments in it. But this is, it was that style, just very different. We went at a very interesting ride with Ranveer, I think. I agree. Him and Deepika. Yes. Interestingly. And I just love them so much. We could talk about their acting now. Their chemistry is clearly on the freaking roof. Infamous. I think is what it's called. Like, yeah. They are attracted to each other. Man. They are going to make gorgeous children. Gorgeous children. That's literally what I said. That's what she said. We're watching, it's during the holy thing and they're putting the colors on each other and I'm looking at them going, you know, it would help if they weren't so hard to look at. Just to have to watch them for this next two hours is such a labor. Oh my goodness. And we've seen it on small screen. I want to see, I want to see a Sanjay, I'd love to see this again on a big screen. To get everything I'm supposed to get from his visuals and the beauty of these two people. They're just like, what? They're just, they were created for film. Uh-huh. And each other. Yeah, and each other. Their child is going to have the hair of a god. Like, both of them have magnificent hair. Their hair is fabulous. Oh my word. I want their hair. And their skin is so soft and beautiful. I love how she commented like, you don't have any hair on your chest. I know. The script, by the way. Okay, so let's talk about, I love, there's a lot I loved about the script both in the dialogue itself but also what Sanjay did to Romeo and Juliet. So can we talk about those things? Yes, go for it. Okay, first of all, the playfulness, and I bet we would have picked up on more if we knew the Hindi. It would have been even more intelligent and more playful and fun. And even more Shakespearean, because that's what Shakespeare is known for. He's using Gimbalan tundra and puns and quicks. He did a lot of it. Yeah. He did a lot of it. So much. Really well written, really felt like it was just off the top of their head. I also loved the fact that he did a couple of things with the story. He didn't need to make it, it's a tragedy, but he didn't need to make it feel that way. Yeah. Even in the end. He didn't make it feel like Shakespeare's tragedy. He reinvented it, really. He did. West Side's story took it and contemporized it. Yep. He contemporized it and added another level to it where it was still a tragedy, but it was a tragedy that was actually a different kind of tragedy. Yeah. My only gripe with the film, because I really enjoyed the film. Like I could watch this over and over. It's one of those films that you could just put on. Yeah. That's why I love it. The only issue I had and it's, I don't know if it's an issue, it's just at some point, it feels like the stakes seemed high, but they didn't feel incredibly high at some points. I see what you're saying. See what you're saying? Yeah, I agree. Like you knew the stakes were high, but it didn't feel that way all the time. Which was a really, I agree with you. That's the only issue I had with the film. I'd love to know. I'd love to know if Sanjay had to grapple with that in terms of the actual creation of the film because he had to go one way or the other. I don't know that he could have done both. And I think his attempt to begin it with the violence between the two sides was his way of kind of giving you a smack in the head to say the stakes are high. And he had to focus more on their love story. That's what I figured was happening, of course. Because he did. He really, and maybe it comes from... He weakened that part of Shakespeare's story. Maybe it comes from watching Vishal's Shakespeare adaptions. And obviously, like I said, he's a very different people and directors. He's, like you said, the composers, the ones... Well, Sanjay's Mozart and Vishal's Beethoven. Yeah, and so maybe it comes from that, but that's the only... And it wasn't all the time. He definitely got even better towards the end and he felt it towards the end.  No, we're gonna attack you.  And so, also bullets come down. That's what I'm saying! Oh my gosh, they were all shooting at the air and I looked at it and I was like, they do really, those have to come back down. They're all dead. Also, every single one of them.  And they were surprised that somebody got shot and died. And they obviously already were struggling with aim. So that was weird for me. I was like, what kind of a game is this? Well, you're entrusting your enemy to not shoot you? Right.  But I do think that was part of the thing, was they were good enough shots that to miss would have obviously been intentional. Gotcha. I think. Yeah, I think. But he missed the last time. Yeah, I know. Like, right before he shot that guy, he literally missed. I wanna know what you liked or didn't like, just as a whole. I think you looked some of the first stand up things for you. I agree with Corbin that sometimes the stakes weren't as high as that it, it was, you knew there was conflict and struggle, but then at times you're like, okay, it's not that big of a deal. Right. Like, it's fine guys. Just get over it. Yeah. Can't we all get along? Like, let's just have a party. Yeah, let's just party. Let's not shoot each other as much. Just try out these new things. So that was for sure part of it. I loved, like we said, all of the directing, the chemistry of the two of them, so beautiful. And I just love Deepika and her emotional, just available, like she's available. She's always, she's incredible. At all time. Yeah. I mean, I know I say that. Her eyes. Yes. Yeah, but that is. The emotion behind her eyes is the thing.  And she'll be saying one thing, but meaning another thing. And they get glazed over with these tears and it just makes me wanna curl up in a ball and cry with her. Yeah. And I, we can go back on the acting for a little bit, but like I love them obviously. And I loved getting, I felt like right when they both came on screen, especially Ranveer, I was like, oh, we're watching Ranveer film again. Yes. I know. I love him so much. Me too. He's like one of my favorite actors. He has such charisma and energy on screen that he brings. Which is fun to watch him. Yes. Her too. I have become, I have become very, very big fans of those two actors. Oh yeah. And it's in a big way. And I'm excited, very excited about the next film, which is the cricket one. Yeah. They're playing the husband and wife. Oh, I didn't realize that Pika was in that with him. Oh, yay. She's playing. I love it. I believe the cricketer's wife. But yeah, they, I'm very, like I love watching them. I was very excited to watch the film again, but yes, we can talk about her now. Her. Okay. I don't know where it went. But her name is, say it again for me, please. Supriya. Pathak. Pathak. She was brilliant. I watch this with my wife. And that was the first thing she said. Ooh, she was like, who's that? Who's that? She's, she's like, obviously Ranvir and Deepika, but like she was really who stood out for her. And I agree with her. She's phenomenal. Apparently she's- She carries so much weight. She can wake up Sid, which is with, I believe, Ranvir. Okay. And then- Yeah, I will say, she'd been around for a while though. I know there were a lot of other supporting people, and we'll probably have the quintessential moment where someone will say, you didn't even talk about filling the blank. It's every review. It happens every review. I can tell you that the three people that I remembered and only mattered to me when this was done. Mm-hmm. Was Ranvir. Deepika. Supriya. Everybody else was good. They were fine. But if they had stand out, you know. All they were was there to support those three telling the story. 100%. Yep. And she was just- It's great casting because- So. She has incredible eyes, just like Deepika, so it was very good casting. Yes, and that eyeliner underneath made her so intense. Oh yeah. She is really, really good. Yep. Reminded me of the weight of, what's her face, Rick? Do you remember- Come on. In the office. Saber. She owns Saber. Oh, yes. And she was in Kathy Bates. Kathy Bates, thank you. Reminds me of the weight of Kathy Bates. Very, very good comparison. Like she's like- Go Corbin. Thank you. Yeah. Sorry for not ruining your name. Great. And you know who she really did remind me of? Many times. And this is as high a compliment as the woman could be given. And it isn't just because she was playing a mafia guy. Yep. She had some Brando kind of influence. Yes, she did. Just- It was probably unintentional. I mean, you can't really make a gangster film without- No, but even- It was a little bit of that, yeah. I made that comparison with McBool. Mm-hmm. That there was very, very, almost veto Corleone impersonation. Yeah. Ordering. She didn't go that far. There were just these little shimmers and hints of more for me, this actor's process. I felt that she was very much morphing like being a shapeshifter. Yeah. My suspicion is maybe she's done a lot of other different roles and that this was just a role. I felt like when they said cut, maybe she didn't change character. Mm-hmm. I just, I felt like this woman was just that heavy of an actor. She is phenomenal. She's so good. I would love to see her more stuff. She might be like the same thing like when we've got introduced to Vijay Raaz and like- Yeah. His weight and his presence is all there. But what do you think of the end? That's what I was gonna say. I'd like to know your opinion. I have a thought about the end and it's tied to the re-envisioning that Sanjay gave to this story. So I'll save that. What did you think? I liked the ending. I'm, I like tragedies, but at the same time I don't like them because I'm someone who loves happy endings and I just, I just wanted to be happy. I wanted them to right off into the sunset.  That would have gotten me mad. Like, I was watching and I was like, and they just started knocking right in the door. Right in the door. You are not gonna make them live.  Yeah. Yeah, if you're gonna do an orientation, you cannot do that. Don't go that far. Well, I mean, we all did with... To a certain extent, but for me, I mean, the whole reason Romeo and Juliet is the story it is, is because they don't make it. It's a tragic love story. Yeah. Beautiful, but it's horrible all the time. But it's a very different, it's not a tragic love story. It's very different. What did you think? About the end? Yeah. Oh, I enjoyed it. And I think this is a different adaption of William Shakespeare because the original adaption, I don't actually think is that big of a love story. I don't... Right. Oh, you're getting into my favorite thing about this movie. I don't, I don't, in the originals, obviously they were like teenagers, right? They were real young, right? Yeah, I think the way it's depicted, they're probably, she's probably 14, he's probably 16. Yeah. And so I don't see it like, when I think of Romeo and Juliet, I don't see it as a love story. You see it as hormonal teenager. And in fact, hormonal teenager said wants to, and he even says it. Yeah. Which makes me, I think it's quite funny because I talked to her name, she was like, would you like to talk to William Shakespeare about your views on Romeo and Juliet? Because she was just a horny boy and the only tragic thing was that she fell in love with him. Right. And he didn't actually fall in love with her. Yeah. They went a little different here. Obviously, Ran Veer, I feel like I think it was hard for him to show his love, to not show his passion for Topeka. So it was kind of more obvious that you really loved her. Yeah. But yeah, the, That is, that original Romeo and Juliet, I don't know. This is my favorite thing about Ran Veer love, aside from the visual aesthetic and what we've said so far about the acting, but going straight to the core of the film and movie being storytelling and being an adaptation of Shakespeare. I, this is actually something that I think he improves upon Shakespeare's story. I agree. In that he made the two main characters mature adults who don't just become infatuated with each other. They genuinely reach a place where they even recognize, yeah, there's probably some lust that's at play here, but ultimately, I don't believe what I'm experiencing with you is lust. I think what I'm experiencing with you is what we've read about in poems and what we've seen in movies. I think I'm genuinely experiencing true love for the first time when he's drunk and he's talking about her. And he calls out to God and he says, you made millions and millions, but there's only one of her. And that for me was my favorite part of this, is that it wasn't just some teen infatuation. It was these mature people who actually seemed to have loved at first sight. And they were able to grasp the concept of it, where it wasn't just love and everything, it's that they actually thought about it and the fact that they both were then put in positions of leadership. That's it. That they had to figure out that dynamic. We love that.  She was taking on her mom's mantle. Yes. And he was just like, yes. And he was like, almost like saying, she was saying something and he was like, and we'll never fire another shot and he was crying. Yes, because for the totality of Romeo and Juliet, you have the Montague's and the Capulets, and Romeo and Juliet's focus is only and always on, we love each other and why can't you get along? The mature adults recognize, we love each other, but it's way more complicated than that. Even when they had that fight, and they have the fight from their family's sides and say, well, your side's always on that and your side's always on that. And then they realize, can our love actually survive this? I love that maturity. And then also at the end, then being able to realize that their love is hurting their people. That it's not just, we're hurting each other. It's like, no, we have this level of responsibility where I've got my family and you've got your family. And yet, I can't stop it. I'm in love with you. Yeah. Where it's like, oh, I can't. I got the writing and that was really, obviously the acting was top notch. And I love watching Ranveer just cry while he was saying all that stuff to her. So I thought that was brilliant. There was one part that I didn't know how I felt about it was when, what's her face that we love? Ba, when she kind of came around. I don't know how I felt about that. I don't know if I liked it and I don't know if I hated it. Cause I didn't know, I didn't want that much tie up in a boat. Well, you know what I like about it? Cause I'm with you. I mean, she did a great job in that scene. She did a great job. What I like about it is that Sanjay kind of threw us a curve. And that was one of the contributing factors that made me worry they won't die. Like, are you kidding me? I really thought, is he gonna turn this into a Disney ending? Cause I love Disney endings, but not for Romeo and Julia. So it actually, for me in retrospect, cause I didn't think about it during the time, it actually made the story more tragic for me. He was able to take their story and not make their story so tragic, but make the whole of it tragic because... Because they could have. Here's what he did. And I would love to talk to him about this. The tragedy of Romeo and Julia is the fact that if both of them had simply known what was really going on, they probably wouldn't have died. She wasn't really dead in the original Romeo and Julia. He can't live without her. He kills himself and then she wakes up to find her true love and he's dead so she kills herself. It's just that timing of the tragedy of if they'd only known. He erased that from them and gave it to her and made her the one who said, this can be, they can be together. I've ordained that we can unite the families and they didn't know. And they go forward with... I liked the way they did it. And I loved them killing each other. The, I know, that was... Tragic, heartbreaking, awful, but I loved that they did it. Yeah, specifically with Ba or what is Supriya. I think I'm saying that right if I'm not correct me, but the thing that changed her, I love that it went, the thing that I really liked about it, and I did question it a bit at the beginning when I first seen it, but that the thing that made her realize everything was a child and she's a mom. And it was a kid. Great point. And it was like, for a moment she realized, this is my baby girl. We need, I need to remember that it is not just guns. It's not just killing everybody. It's not just wars and strife and all of this. Great observation. I'm a mom. This is my baby. This is a baby who's getting to see what I'm doing. And how can I do this as a mom? Yep. Yeah, so, yeah, I loved it. Me too. I'm definitely watching it. It's one of those movies that like, as opposed to like, Header, which I loved it. It's probably one of my favorite films. Nothing comes close to that or yeah. But like, I could probably watch this more. Absolutely. It's one of those kind of things. It's way more palatable and it's way more enjoyable. Just the musical numbers and of course there's the musical number with Priyanka. Yeah. But. I don't know how I'm cheating that. It is really, yeah. I would, for people just becoming introduced to Indian cinema, I would put this early. Yeah, yeah, for sure. Dying more palatable.   And then we started to get into some of the meatier stuff that was beautiful from Sanjay like Padma Bhat, right? This would go in the forefront like that. Header would either go toward the later part. No, it's just done there. Love for Shakespeare. Well, there's two things. It's love for Shakespeare and it's also, if you don't understand Kashmir and you don't understand some of the parts of life going on in India. But the main thing I would do, if I got a thespian, I would take them straight to Header or not, I would do not pass. I would make it their first Indian film. It's that good. Let's look at this one first, then all the fun. I would watch this one, if this was on TV, I would be as giddy as a little kid and go, oh, get the popcorn, it's time. Get the popcorn. That's what we should watch in review next. And what do you think of the film? And we'll watch anything that has these two people in it. That's fact.


Learning in a platform like this is by itself, I think an extremely satisfying experience because you are learning from the best faculty, you are benchmarking yourself against your peers and lastly, you have the satisfaction of completing a necessary part of your information technology learning on one of the best ways to learn it in a 21st century model. I must congratulate IITs for taking this initiative to take education and the contents that they have as part of NPTEL to all the people, particularly the student community who can benefit a great deal. Hi, we at Google have been working with NPTEL for the last six years. They've done an amazing job of bringing so much engineering education material online. They are the best hope for providing a high quality education to hundreds of thousands of Indians. Definitely, once you get hooked on to this particular process of learning, you will find that you can learn at your own pace and time and you will also be benefited with a certification which is also, what a case, stamped by industry and therefore you will find it is an employment facilitator. This program will be the harbinger of a big intervention in India in the area of online education so that we can address the grand challenge of providing high quality and useful education to a very, very large number, probably the largest number of youngsters in the world. Thank you.