All right, we're here with Bob Lantz, the creator of Mininet, which, I think, all the students in the class have been using and I think we all love. Bob's at ON.Lab and we're going to talk today a little bit about past, present and future of Mininet. So thanks Bob for joining us. Yeah Pat, sounds great. Well, I hope it works well for you and don't hesitate to, oh, is it still working? Let's see, Google looks, confused, Google these errors, but hopefully you can still hear me. I can still hear you, you're there, yeah. [INAUDIBLE], and don't hesitate to give feedback. The best place to give that, of course, is the mailing list, although you can also email me personally and another great place to give feedback is if there are actually bugs is to file GitHub and also to send pull requests even better if you find and fix bugs. So I look forward to hearing people. I also like to hear from people who are using Mininet, for all sorts of things, and it's very interesting and I don't necessarily have a lot of visibility into what people do with Mininet. Mininet doesn't track you and tell me what you're doing with it. That perhaps would be interesting for me to know but I would hate that so I would never do that much [INAUDIBLE]. >> [LAUGH]. >> So I just rely on people sort of talking to me and also looking at papers, you know and seeing, oh, this refers to Mininet or used Mininet for an experiment or looking it up, or finding out about classes but I don't necessarily, it's all really interesting. To hear what people are doing with Mininet other than [INAUDIBLE]. >> No, definitely. I mean, we are huge fans, huge fans. So thanks, thank you first of all. So I actually wanted to ask, how did Mininet get started. Like, you basically created it sometime ago, and the rest is history but how did it all begin? >> Yeah, right oh. So a couple interesting things. So I was working on open flow at Stanford, so back in the day when we could sit in these for open flow from it's origin up to open flow 1.1, we'd have these meetings to talk about open flow and open loss protocol and various things and sort of evolving the protocol and figuring out what should be in the first version of it. And in one of these meetings one of my colleagues Janus Sekunis was sitting there and his laptop was going into overdrive and you know, it sort of sounded like a jet engine and it started radiating. I'm like Janus what are you doing? He's like well, I'm doing open flow on my laptop we had a test network set up on his laptop. I was like, wow, you must have a really huge open flow network. And he was like, well no, actually it's about the smallest network you can imagine. One host in a BM, another host in a BM, an open flow switch at another BM, and then an open flow controller at another BM. So he had the smallest open flow network you can imagine but it was really taxing, ridiculously taxing to research [INAUDIBLE] in his laptop and it was clear at this time that we were really doing it wrong. And at the time I was working at Arista Networks, and one of my colleagues there Eric Peterman, who is responsible for network name spaces, basically assembled the a la carte virtualization features of. He actually implemented that with name spaces and worked on other namespaces and all of them merged in and Arista used them, used network name spaces to test hardware actually. You can have a device under test in the lab and have it connected to the control plane software running your laptop and have all the interfaces done. All this is a really neat setup, but it occurred to me that it would be a really great Ideas to use this for network emulation, and for OpenFlow development. I guess another thing to think about is, well, I guess another thing I'll say is how I got into networking. I just walked into this seminar at Stanford, I think it was the EE380 Computer Systems Seminar and Nick McKean was giving a lecture there and I wasn't really a networking person at all, I was kind of a operating systems person and I was working on my dissertation in school in computer architecture and architectural simulation. And he made some really interesting comments. Which is that he said said, computer networks are like hardware without an operating system. And I was like really, is that really true? Because operating systems are really good. They give you all these good things. They give you useful abstractions, they give you nice API's for programming things, they give you resource management scheduling, they give you user groups and permissions, and multiple administrative domains. All these really awesome things that we know and love, like servers and do switches really work differently? Of course, when I started investigating how switches worked, and ended up working at a switch company, I found that, yeah, the operating systems were all in the box, and they were really kind of primitive and didn't do a lot of things that you would really want your network to do, and really want an operating system for networks to do. So, I really wanted, thought that creating a network operating system is a really good thing that needed to happen. Something that was really missing in the world and, the problem with this of course, when you need, when you're developing any sort of software system, be it system software or application software, you need a development platform. And so I really created Mininet as a development platform for the network operating system and to solve that terrible, terrible problem caused by heavyweight virtualization. And fortunately Linux has lightweight virtualization, a la carte virtualization, just enough virtualization where you just virtualize the minimum amount that you need and so by doing that Mininet was able to get drastically improved capability on a single laptop compared to what you could do with heavyweight virtualization. And the same thing's even true compared to, you know, sort of heavyweight containers and LXC, which is another container virtualization system or User-Mode Linux. There are all these virtualization systems some of them which use different parts of Linux. But the idea of Mininet is you just have a processes connected with basically with an IP address, or an ethernet interface and that's pretty much it. And that's all you need to do [INAUDIBLE]. So that's kind of the origin of Mininet. So I demoed it to this to the OpenFlow software architecture, working group. We were just meeting every week and one of the people there was Brandon Heller who I've been talking to about this thing. You know we should really use network name stasis to do OpenFlow and he's like, well, what is this? And then at the demo he's like, this is great, we really needed it. And so Brandon immediately joined the main f project, and is really responsible for turning it from a research, for helping to drive me to turn it into this, and also to contribute code himself, and really join the project. To basically turn this from a research prototype to demo to something that's going to, anybody in the world can use for research, teaching, you know, in software development or controller development in industry as well. >> Yeah, that's interesting, I mean it's interesting you mentioned these like sort of variety of container technologies and now I think basically Docker seems to be all the rage. Which is basically just LXC containers with a nice, fancy, usable interface and I think one of the cool things about Mininet is not only the technology, but also how easy it is to use. And I'm wondering what you make of the whole docra movement, and if there are implications for Mininet there? I mean both are quite easy to use, but they are using totally different technology, I mean not totally different, but a little bit different. >> Yeah. [CROSSTALK] They're using, everything is built on the same thing, it's all built on and it's all build on Linux container architecture. Which is a little bit bears a bit of explanation Which is that Linux has this ala carte virtualization known as variously as containers or as namespaces. Really namespaces, well there are a couple of features, namespaces, is one of the control groups is another. But, basically if you look back, you know, to Operating System since, you know, perhaps almost as long as we can remember. Operating Systems have always had this kind of virtualization technology called processes. They give you the illusion that you own the whole machine, right, that you can use as much memory as you want. Well, hope the Linux won't run out or until you run out of virtual memory and you know, you don't have to worry that there are other people using the CPU unless there's interference because there's really not enough resources to go around. And so, processes are not just a virtualization, they're actually an abstraction but even so, they virtualize the CPU and they have virtual memory and operating systems. So what Linux has really done and actually Derived, probably, from other operating systems like BSD, free BSD, had virtual ethernet pairs, had jails, had Solaris, had zones. Basically, there's this sort of operating system level virtualization technology which Linux has taken and sliced up, so you can say, well If I want a network interface attached to my process I can do that. If I want a different set of users and groups attached to a process I can do that too. So there are all these name spaces in Linux and it's a really great system, because This allows you to build all kinds of virtualization solutions from heavyweight container solutions sort of like Alexi and Docker where you get something that's basically a full virtual machine with it's own file system maybe or perhaps, Union file system in the case of Docker. But it really acts just like a server, and the only difference is you're sharing the same kernel. To something like Mininet where we share everything except every process gets its own IP address and ethernet interface. And basically IP and ethernet stack is what's virtualized in that case, and that's what needs to be but all this stuff is useful. And so, it's sort of great, like how you slice it and how you bundle it and so I think, I like easy to use. As you noted easy to use and they have good tutorials, good website, they have a lot of good marketing as well as product development. I think it's helped out a lot. Containers are good, I'm not going to preach I think we're all Team Container here. [LAUGH] So, on the other hand It's not my goal, immediately, for Mininet to replace OpenStack, even though it kind of can do the same thing. You said this in one of your lectures, which I think was brilliant. You said, we've talked about network virtualization, Mininet's a network virtualization system. It absolutely is, I've known this for a while, but you sort of crystalized it and said it very clearly, which I really appreciate. And it turns out you can do open stacking types things with Mininet although probably you don't want to run your infrastructure on it but you could. But mininet obviously doesn't have the things like, most notably, open stacks and key stun authentication database and multi [INAUDIBLE] kind of ignore security which I think I should warn everybody about. You probably don't want to, usually, connect your Mininet network to the Internet at large. You should be careful about that or, at least, only connect a virtual machine that you don't care if it's unopened, you can just start up another one on the laptop or if you see it over here. >> Right, mm-hm. Throw it away when you're done basically. >> Yeah so, Dockers kind of more on the open stacks sort of space but there is other really irritating problem with Linux, which is application packaging is so terrible. Absolutely, yep. >> Can you hear me? >> Yes. >> Yeah, great. Yeah, so we have RPMs and DEBs and all this stuff and it's like DLL Hell on Windows. Whenever you pull in something, you have to pull in 20 other packages that change all your libraries and you get all this stuff. And there's no consistent ABI In Linux the way there is on MAC OS or Windows. Where, for the most part, I can have an app from a 132 app from the 1990s and I can still run it on Windows 7. And I can have a MAC OS 10 app from the early 2000s that I can probably still run on a MAC OS Yosemite even though Apple's sort of Plus backward compatible that Microsoft is for the most part but Linux, you're all out of luck. So as a result, virtualization technologies that wrap the whole environment up around an application and deploy an application sort of as a VM. But sort of, I think that's one of the things that's driven it on Linux. On the Windows side, it's a sort of lack of isolation and lack of security that's kind of driven virtualization technology to I don't really trust Windows to isolate my mail server from my payroll server from my web server and so I want to run them all in separate virtual machines. So it's kind of why I think it's a big reason why people do virtualization on Windows. So on Linux, you see these doctored images of like [INAUDIBLE] why is that? It's like, well because ONOS is a pain to install. >> Yep, yep. >> Because there's all these libraries. >> Yep I've pulled the ONOS stocker image in fact for that very reason. >> So it's my goal to make that go away on multiple fronts. To make it so you can just double click a jar, and its JAVA program on the ONOS side and on the Mininet side to make it possible for Mininet to have an object that looks more like a server. And this is one thing I'm adding to Mininet is, add a Mininet host object that is slightly heavier weight than Mininet does, that you can run SSH in that has it's own process name space and doesn't actually, actually uses an overlay file system so that you can remove files, and add files without messing with your underlying file system. So that's something that looks more like docker. Also somebody, Gregory Yee who is responsible for doing most of the mini nets mini edit GUI also created a Docker object for Mininet. So we may integrate that in, it's possible but I sort of want to discourage people from using Docker and Mininet for the most part because I think it sort of more overhead than you need. The same reason why I want to discourage people form oh, I want to start up ten virtual machines and connect them to Mininet. That's not what Mininet was designed to do. That's going backwards, not forwards. >> Right. >> It's making the development process, making your run, edit, compile in a debug loop for your SDN applications harder, bigger, fatter, and slower so you really don't want that. >> A sort of lean emulator, if you will. >> Yeah, but if you need to run Windows, if you need to run BSD. >> There you go, yeah. Then you need real virtualization for that. So you need full system virtualization. >> Actually yeah, I mean, it's interesting your comments about the relationship [INAUDIBLE] with OpenStack and other things. Also, coming back to what you said at the very beginning, you don't really know whose Who's using Mininet, but what's your sense of, I certainly use it a lot in research and teaching, and so forth. Are you familiar with people using it in sort of commercial or production environments, and? >> Oh yeah, definitely. So I don't know, like at ONS, the Open Networking Summit was what, last week or so and we'll ask people like, how many people have heard of Mininet, or used Mininet and like everybody in the room raises their hand. This is largely Silicon Valley industry people, and people from networking companies. People from cloud companies, people just from Silicon Valley. So I don't have a lot of visibility into that and whenever I talk to people at Cisco and Simeon they're like oh yeah, we're using video and we love it. And like So what are doing with it? Oh no, we can't tell you. I don't necessarily >> Ha. [LAUGH] >> Right. >> I think there are other organizations that are probably using it too, that can't tell you. >> Yeah, yeah exactly. Well, I have no idea. But pretty much everyone I talk to in Silicon Valley who does SDN has heard of Mininet. And Mininet is not necessarily the right tool for all jobs. In SDN, but I see a lot of uptake, and I can tell you what 's used for. First, pretty much every controller platform that I'm familiar with, so Open Day Light, Floodlight, Ryu, Pox, et cetera, since Nox, since. You know, since Mininet has existed as, used Mininet for core development and testing. And pretty much every controller has been built using Mininet. Which is gratifying, because that's the purpose of Mininet that I really had in mind. Is that it's a development platform to make to enable us to create a nesting operating system. Now, most controller platforms aren't quite an operating system, yet they're more like protocol wrappers. We were in a really primitive operating system era for SDN. But that's its purpose, to be a platform for development. So people using it for controller development, and also for application development, of course, on top of controllers. And also for testing. It's kind of a convenient way to spin up a virtual network for end to end system testing. >> Yes. >> And one thing >> That is important to me with Mininet is this idea of parameterization, and parameterized topologies. And I say well, I want to run my app over 20 different topologies, and with all these different. And just change a few numbers, and I can say oh, well now my mesh instead of being 10 by 10 is 20 by 20. Or my tree depth has changed, or the number of interconnection links has changed. >> Yeah, I really like the way that you've done that in Mininet and just the programmatic API makes it >> I mean, quite easy to do that. And actually, as you know from the course, we have students play with that. Like generating different topologies through the API. I think it's quite handy. >> That's kind of one of my other design philosophy thoughts on Mininet and things in general, which is that >> What configurations are in XML or JSON or whatever, or comma separated values are okay. And it's nice to have things, it's nice to have a set of existing topologies like oh, this is AT&T's network, we want to assimilate it. That's great, but I really think that Python as a configuration language is much more powerful. Because instead of having to write 10,000 lines of configuration, I'll use a four loop. [LAUGH] >> Yep. >> Yeah, it's. >> Good old four loop. >> Four loop, yeah, it's like, I don't know, it's like. >> Functions, it's amazing, you can configure a network using a function. It's- >> Exactly [LAUGH] [INAUDIBLE]. >> More than a concept [INAUDIBLE] >> [INAUDIBLE] is all about right, yeah. Taking something that used to be really painful and manual, and making it automated and done by software. >> Yeah, definitely. I wanted to ask you a little bit about what's going on with, you mentioned the nice aspects of Mininet that make it scalable. And I know there's been a little bit of work on sort of running Mininet over a cluster. At least I've seen some stuff on GitHub about that, I haven't tried to run it myself. What's the kind of status of that, as far as really kind of skewing it up on one machine? Do you think that's feasible, or is that something that could happen? >> Yeah, so really since day one, like if you look in the Mininet source code, it actually mentions, from first version Mininet it sort of even mentioned this mythical like >> Well, not entirely met the goal of Mininet Cluster Edition. I say well, comments like, I think these objects could be made for proxy objects, for remote switches to host on other servers and things like that. And it turns out if we go back to, I don't know, 2012. I guess Vitalia Antonenko from from ARCCN in Moscow, who I'll probably never see again because of politics, but he's a great guy. [LAUGH] Basically he was working on propagation of malware that was his, not working on it, that was his area of research for his graduate study. And he made a network on multiple servers consisting of like 30,000 hosts connected by Mininet over multiple servers. And he wrote a wrapper script that clustered put this together. We've had this sort of thing for a long time. Also Phillip Wette who's been on the mailing list, has made a clustered version of Mininet called MaxiNet. It's probably the most mature clustered edition of Mininet at this point. So, I'm inspired by all this stuff and I think that clustering should be a part of Mininet proper. And so, since, I don't know, the last or second to last version of Mininet. We've had experimental clusters for it in Mininet that allows you to distribute Mininet simulation or mininet experiment across multiple servers in a really kind of simple way, like something like cluster options. Cluster, local host, machine X and machine Y, and it will just like distribute it over the cluster, just as a command line argument. So, I'm really into making it as easy as possible. And sort of making it so that it's not as complicated to set up a mininet cluster as it is to say, set up an Emulab cluster test bed. So it kind of end to add high clustering. So we have this experimental cluster feature, which is in there and it works, but It doesn't address the issue of, I want a large simulation to start up very quickly. But what it does give you, is it gives you the ability to use more resources to have like higher bandwidth links. They have like servers that have more memory, more megahertz, more gigahertz, more gigabytes or megahertz, megabytes. If you're slicing it, shall we say and sort of faster interconnect. More gigabit lengths because obviously you need to get it across. So in terms of resource scalability, it works pretty well. But it also it has some bad scaling characteristics in terms of it actually creates too many processes as it is, actually it's not as fast a startup as I'd like. The thing I'm working on for the next month or so, is completely revamping Plus Redition. And I'm going to double- >> Oh, cool. So that's like the top line item right now, for you. >> Yeah. That's what I'm working on because the deadline is at SidCon. >> Awesome. >> And that's in a month so- >> Awesome, awesome. I'm psyched for this demo. Oh yeah, so, you can come and hopefully I'll have something, we'll have a demo whatever there is. But hopefully it'll be kind of interesting. >> Hopefully it'll be this. >> What? >> Hopefully, it'll be this. Yeah. >> Yeah. So that's kind of what you'd call scale out performance. In addition to that, I work on a scale up performance but it's on small machines and on bigger machines. And so, one thing I've done recently is, you may be aware that ObsDB gets slower and slower the more links and the more switches you put into it. And that is reflected in Mininet. The of the S switches you have by default on the same ObsDB, the slower and slower it gets. So if your 60 looks pretty good, it's like 60 to 70, 70 to 80. And it's because every time do it, even though, the commands are batched, every time you do an ObsDB scuttle command, it has to load same database on it's way. It's the way ObsDB works. So, yes I have a version of the Obs switch that uses multiple ObsDBs. So that really improves the starting time significantly. I can make a 32 by 32 Torus, so that's like a thousand switches, a thousand posts, 5,000 links. It will come up in about a minute and a half on my laptop. >> Wow. >> Not as fast as I'd like, but it's certainly doable. And the nice thing about that is, I feel like I'm a little bit ahead of the game, because every existing open flow controller I've tried that configuration with, It tends to sort of melt down and perform very poorly. >> Yeah if you can keep ahead of the controller capability. >> Right. So, I figured as long as I'm ahead of the controllers on the laptop, that's still a pretty good place to be. But I still want to move, let's scale up on a laptop Still want to do better scale up on big IR and better scale up across the cluster as well, so working on all those things. So batch mode is one thing. Batch startup is one thing I added to Mininet to improve performance on a laptop or any server, single system performance. And also there's multi ODSP to sort of get around this OBS issue of the more switches you have the worst ODS performance because of loading the database and it's also possible. Of course, if you don't use ODS, if you use some other switch like the Stanford reference switch or the CDPD switch, it doesn't have those issues and although it does use two processors per switch, two processors per switch. So you may end I mean, there is no free lunch. We've run into this in CS224 at Stanford where, which is the Graduate Network of course, where people, which you should all check out by the way, the blog for the course. Research blog, Wordpress.com blog. You should check out. I'll link it from the course pages. That blog is awesome. Yeah, so, it's basically trying to bridge the gap between a PDF and actual sort of networking research and experimental practice. By reading the PDF and trying to reproduce the experiment. And what's really interesting is one, how many of the results are good? That's kind of encouraging for us as a discipline. It's not completely bogus. I feel a little better. Yeah, yeah. But what is also interesting is the ones that don't work. And why they're not successful in reproducing them. Sometimes there are bugs in Mininet. And that's good because we find them and fix them. Sometimes there are sort of micro level behavior that's kind of issues things that aren't well suited to reproduction on a sort of a time slicing emulator. Although that's very, very rare, so I haven't really run into that. But most of the time, it's the experimental configuration where someone's like, oh I have this, you know, whatever. The stat tree and I want 64 ten gigabyte links, or ten gigabit links, right? And you're not going to get that out of your poor laptop or netbook. We've run into timing issues in the course, because people running on a wide variety of hardware with different capabilities and some of our auto-grader checks are timing based Have to sort of relax the ranges that we look for, because people are running on some fairly vintage equipment in some cases. Yeah, well the good news is Mininet can scale down. Like, I've been running it on a raspberry pie. Nice. Which I love, because I was talking to Bill Labus about this and he was really into the idea that there is sort of two ideas. One is, that when you do network development it's really nice to have something that feels like a piece of hardware that you can plug into. And also it's nice to be able to plug into the real Internet and get you know, random packets. Yeah yeah, real traffic. But the idea with the pie is, you can make maybe a networking box that has this virtual number in a box, but also has ethernet port so you can plug it into stuff. I think that's an interesting application, although obviously it's not a particularly high performance set up. One thing I haven't done as much as of, but I really appreciate more contribution from people like you who are interested in performance experiments and you're grad students, is continuing to sort of push the performance accuracy of container based simulation and things like Vega. And so Brandon Heller's PhD thesis had some really kind of good ideas in terms of this idea of network invariance. Of things that you know should always be true in your experiments. And you can monitor these. Whenever they are not true, you probably know your experiment is not bad. Whenever they are true, you don't know that your experiment is good. At least you have more confidence in it. >> Nice thought. >> I prototyped. Brandon and I prototyped monitoring software for ethernet. But it's kind of a separate thing as not necessarily been integrated into the mininet core. So, just i don't know. I definitely appreciate more people looking at that, commenting on it and looking at contributions. Ways to answer the question, which I pose as, emulators, can we trust them? [LAUGH] Yeah, no that's a great question, I mean, hopefully more than simulators. I think that's. [LAUGH] It's definitely milder. We're seeing a lot more. Well, it's kind of interesting. Simulators have this wonderful notion of virtual time. Yes. And virtual time is a beautiful thing, because you can do an infinite amount of computation between clock cycles. Whereas with an emulator, it works in real-time which is nice because you may have a real human or a real internet connected to it. And it actually works, whereas it's fine if your wave propagation equation, obvious what your WiFi data rate would be. You know, and you find it out tomorrow because it takes [LAUGH] 24 hours to do. But, you know, the idea is that you can interact with something in real time, with real applications and real traffic and real people is really neat. But but virtual time is really very, very useful. I think that simulators can up their game. My graduate work was in complete machine simulation, and so one thing that I find that a lot of simulations and simulator developers omit is, they don't necessarily run all the same code, in terms of operating system code, library code, real application switch code, that you run in real hardware. Yep. That is just it. Yeah. That makes is less realistic. And of course, that's an advantage of mininet, because we just run the real bit, it's really cool. But, it's good for simulators to do that too. I really believe that [INAUDIBLE] simulations get bank. I want to see people connect network simulators to complete chain hardware simulators to get more accurate results. And also preserve this really nice property of virtual time. Another neat thing about virtual time is, it essentially runs faster than real time, which is really nice as well. So, you don't have to wait a week to find out what a week of your traffic results would be. Good point, yeah. You could also do time dilation in. That's another interesting thing. So. Interesting. So you know simulators in general, I mean emulators in general can do this where they sort of have this notion of virtual clocks that are locked to the real time clock in terms of some multiple. Like real time might progress slower or faster than virtual time, plus the multiple. There are a bunch of papers on this, I guess die-cast times, slice time various things. We did it in Mininet modify to basically run Mininet and Virtual Machine whose clock would be different, would be sort of the multiple Realtime. And that turned out to work really well, that all of a sudden, you could take ten seconds of real time to assimilate or ten seconds of real time to simulate one second of virtual time, and all of your events can run, and your CPUs and everything can run ten times faster. So that's a good approach. Someone else did the same thing. But using Linux kernel and something closer to containers and presented that in SOSR and what I'd really love to see. Although, it remains to be seen what the use cases are for this, is an expansion of the namespace subsystem of Linux to include ClockName spaces. [CROSSTALK] Virtual clocks that vary from the real time clock in some way. And they didn't quite do it that way, but I think Clock Name spaces are a winning idea. It's obviously great for Mininet, but can also be used for other things like testing various subsystems in Linux to determine how they perform on hardware of varying speeds. >> Sure, sure. >> So things like drivers, things like real time characteristics, anything that's timing sensitive. In the operating system or applications. Potentially this clock name spaces idea can be used to test it so. >> But I'm not particularly optimistic that this will happen in the near future, but I think it's a good concept that has legs. You know and maybe I can also bug Eric Peterman about it and say, yeah why don't we have clock name spaces. I want to clock names spaces. >> Yeah, yeah. That's a cool idea. So, actually, just to close one thing you've talked a lot about, like cool new features, and I thought I'd ask you. It sort of rounded out at the beginning. You take bug reports, pull requests, contributions of all kinds. And I thought I'd ask you, what's the most interesting, or sort of I'm sure you get a lot of interesting cool requests, but what's sort of the most impressive cool request that you've got, where you're like oh, I haven't thought of that and that's really cool, and thank you for that. >> It's kind of rare that I've been surprised, although sometimes bugs surprise me. >> Right. >> That won't work. [LAUGH] So those are always great. I said bug fixes and reports are the most surprising ones, like oh, yeah. So, I haven't gotten as many port requests as I would like. The ones >> So for all the students listening who have complaints about Mininet things, send requests. Yeah [LAUGH]. >> Yeah. >> The ones I'm happiest with are the ones that are kind of well written, good code, and people have thought it out well. Some people who are just kind of creepy send me requests so, I also like that. Like Andrew Ferguson, who is at Brown and now is somewhere else like Australia or Google You know sent me fixes for the TC subsystem for link, bandwidth, and latency. And so that was really nice, because that's something that's really kind of has a nasty command line interface. >> [LAUGH] Yeah. >> The semantics are consummated, and all that stuff. So I was really quite impressed, I didn't want to mess with it either because it was a pain, right? [LAUGH] So this was great, right? Somebody's who's really smart that like figures this stuff out and fixes it. That was really beautiful. Also, Rich Lane of Big Switch made some interesting changes to mnexec. Which weren't exactly what I would've done, but I merged them in and the thing I liked about them is they were correct. [LAUGH] >> [LAUGH] Yeah, always good. >> I sort of modified mnexec to be more like nsenter, or more like Docker. It well, stuff, more like Doctor in that you can sort of specify all the different namespaces, but one. As an interesting aside, I can't get rid of exec just yet because for two reasons. One is that unshare and nsenter aren't part of most Linux distributions. And two, is that they don't fully attach to a container in terms of extension to the CPU control group, which is very important for performance isolation. >> Cool. >> So that's sort of an issue. But I'd say that the most significant probably, contribution to Mininet so far is gotta be, I guess, where we use expansions to MiniEdit. Mininet, for a long time, was one of these examples of if you build it, they will not come. You know, I made this basic GUI for Mininet and I was like, okay I've done all the framework, now I hope somebody else will add to it. [LAUGH] >> Right, right. >> because, the groundwork has been done, you just need to pull in additional features. And so for a long time, nobody did anything, til this one guy said, oh, this is good and added a bunch of stuff to it. So, I was really, really happy with that, adding features to Mininet. So check out Mininet, if you haven't already. It's really quite neat. It's always exciting to me to have a network editor. I mean, and CORE have something similar. Incidentally, it's other container based emulators. But it's really neat to be able to draw the network and then click a run button and have >> Oh that's neat. I haven't seen that, I'll have to check that out. That sounds like a great tool. [CROSSTALK] >> There's certainly one thing that I've observed is that, Mininet's usability could definitely be improved. This is more of kind of packaging issue. But, make it easier particularly for Windows users who are like, well I don't have x-alone and I don't have SSH and those are certain barriers to entry and so probably shipping again with the GUI would be impossible. You don't have to worry about S11 and SSH. [INAUDIBLE] >> Cool well, thanks much Bob. >> Hell yes, so I thought I'd have trouble filling this and now, I just keep talking forever. >> No, this is great. We're going to have to do another one of these. >> Oh yeah, if you you have to, anytime. >> Yeah, this is great. And I think basically, you've got 50,000 enrolled students in this class who we know you told my name and now they know you so this is super. >> Well, fantastic, good to meet you all. I just have to say, wherever you go, whatever you may do, is really great to have a network on your laptop. And so, I hope it's useful. I want to thank you also for using Mininet and for your feedback. And also for participating in our Mininet tutorial, for teaching computer networking with Mininet last year. So, I really believe greatly in building tools that really help students and researchers change the world with nothing more than a laptop. So, I think you really changed the game. You definitely changed how I approach networking as well. You've done some quite remarkable stuff. >> Oh, awesome. Well, and I also love your lectures when you talk about Mininet. It's great stuff. So, I'm happy to link to any of those on the Mininet page. So yeah. And I should really check out more of your course. Just as a comment on it, one thing I just want to give you a little bit of feedback. That one thing I really love about the course is, you seem to have a great vision of SDN as applying not only to the control plane but also to the data plane. >> Yes. >> So, I mean when I took your course you talked about click and I don't know if you talked about it before or about [CROSSTALK] >> But basically, like NFB is, it's just SDN for the data bank. That's all it is. >> Yep. >> So it's a great perspective and I want to hear more people say that. And hopefully people in your class, will really get that message too. >> Yeah I think we're working >> Working on it. So, thanks so much, Bob. >> Yeah, so thanks a lot Nick. Hope to collaborate more with you in the future and happy to chat with you anytime as well. >> Cool, thanks.