 Alright guys, I'm going to go ahead and get started. My name is Chris Moore. I'm with the PCVSE project. I'm the founder and lead developer and I get to hack on that all day. So that's a lot of fun. I like my job. It's cool. The talking thing at conferences is not so much, but you know, bear with me and we'll get through it, okay? But today I'm going to be talking about the Warden and what it is and what's coming in 9.1. What's new, features. We're going to go through some command line functionality of it. And then we're going to take a break, go to the GUI and actually show you how with the couple clicks you can do all the same stuff. Those long commands could have done for you. But first of all, what is the Warden? Well, let me give you a little bit of history about it. It's a jail management utility. It originally shipped with PCVSE 8.x as an add-on. It wasn't included with the operating system. It had a GUI and a command line interface, very basic. And you know, some basic jail functionality for importing, exporting, you know, setting up jails to auto-running food. I mean, it really wasn't that impressive. It was more just to get the GUI and the command line working together as a starting place. But I always knew there was going to be a lot of new stuff we wanted to put in here eventually. And when 9.1 started rolling around, we finally had time like was able to dedicate a couple months to sitting down and adding some new features. So we're going to go over what some of those are today. So new for 9.1. First thing is it's no longer a download add-on package. It's built right into TrueOS and PCVSE 9.1, which will be coming soon to download near you. For those who don't know what TrueOS is, on the PCVSE DVDs, starting with 9.1 when you grab those, traditionally we've always had the ability to install PCVSE and then Pre-VSE. Well, we've now added something called TrueOS, which is our other server offering. If you want something, you know, Pre-VSE base, but with extra packages, Solaris boot environments, the worm jail supporting, you can install our special server to TrueOS operating system, which is, again, vanilla Pre-VSE, you know, the hood. So we're not taking anything away or changing it too much on you. We're also pitching it, especially the Linux system developers or system administrators, and we can, you know, give them utilities like sudo and bash out of the box. And we've got a Linux show, and they're so excited when they hear that. They're like, wow, I can run PreviousD and get my sudo, my bash, and then run ZFS, and how cool is that, right? So we're seeing some really positive signs talking to a lot of Linux guys about this. But anyway, for the Warden again, it still includes a full command line graphical interface, so that hasn't changed from the previous. It's written 100% in shell for the back end, so real easy to look at and hack on. And then the graphical interface is a C++, Qt4. And one of the cool new features is that ZFS enabled, and we'll talk a little bit more about what that means in a moment. Also for 9.1, we've added support where you can do now multiple IPv6 and V4 interfaces on one jail. Of course, we still have support for importing and exporting, which is important. We'll talk about that here in a minute. For the GUI, we've added a lot of new graphical utilities. Here you can manage packages graphically, updates, users, start and stop services graphically. Again, if you're somebody who has no idea about FreeBSD services where they are, you know, Linux is admin, this is really cool for you, because you can now get up and get a jail running with a few clicks without having to know the internals, and then you can dig in as you have time. And we also have support for multiple types of jails, and we're going to talk about that here in a moment as well. And we can import jails from custom archives. If you're a FreeBSD server administrator and you have jails already, we can then import those into the warden if you want some of our nice functionality that we offer. Again, graphical package management, we can do some basic statistics on your jail too via the GUI and the command line just give you an idea what's going on. But one of the things I want to talk about really quick is this idea of multiple jail types. I know you're all familiar with what a traditional jail is on FreeBSD. That's what most people are running. There are two others called PortsJail and LinuxJails. Linux, you can guess what that is. But the PortsJail first, it's FreeBSD jails again. It does a few special things, mounting user home and temp into the jail, copying your Etsy password file so you have your users in the jail. But what it's useful for is if you want to run a sandbox where you can set up a whole other ports tree, you know, do development ports if you're hacking on something and you don't want to mess with your running desktop or your running user local base, you can now have a sandbox location where you can run the Xapps right out of that jail as your user account and actually they're functional and work really well. So I use it for development. It's been pretty handy. It's a feature we had in PCBSD 8, but now that it's in the ward you can have as many of them as you want. So you can have as many development projects rolling at a time and not have to worry about it trashing anything on your box. And feel free to stop me if anyone has questions. By the way, I love chasing rabbit trails. Why is it called PortsJail? On PCBSD 8 we originally named it that because we have PBIs of course for the base desktop and then we encouraged users to install their ports collections in this jail so that they wouldn't go and accidentally remove libpng and then not be able to boot into KDE or, you know, have some disaster happen. So it was a safe place to go and run ports. That was the idea. And so we just kept that name because it's familiar to our community so we'll introduce that to you, but that's what we mean when we say PortsJail. Now the Linux jail, okay? Obviously we're talking about Linux inside a jail where it should be kept. It belongs there. What we do right now is we can install Debian or Gen2 inside a jail. It's still using all the ZFS stuff under the hood, all the functionality the warden provides. It includes easy to set up distro scripts so we're by no means limited to these two distributions. Those just happen to be the two easiest ones that I picked to put in for 9.1. But those scripts which populate your Linux jail are user configurable. You can specify it at the command prompt which script you want to use to load which distro. I'll just give you a brief example of what one looks like. So with our Linux script for Debian, for example, there's a cool utility in the port street called Debootstrap. I don't know if you're familiar with it, but essentially just say give me a release and throw it in some directory and load Debian for you and put it in a charoot directory, which in this case is going to become our jail. And then our scripts will usually do some cleanup. There's some stuff from running Linux in a jail we got to do. We don't want it trying to unmount things, so we do some stuff so when you shut it down, it's not hanging on you and complaining too loudly. But again, these scripts we're hoping to get users to help contribute them. So if you have some Linux distro you need to run in a jail because there's some cool app you need there that they don't release source for. We don't have a port for. Please feel free to write stuff like this and send it to me, and we'll include it in the next release for you. So you don't have to maintain it. We'll start taking care of that for you. Now the ZFS support in the warden. So what have we done with ZFS? Well, first of all, it's all automatic. There's zero configuration for ZFS. All it needs is ZFS on your file system. So if you install PCBSD or TrueOS and click the ZFS option, this will just be enabled out of box for you. It'll go ahead and detect your pool name, et cetera, and use it for all the right commands. Of course it does snapshot creation and management of the snapshots. We now have scheduled snapshot ability, which I'll show you that in the GUI here in a little bit. It's easy to clone snapshots. If you're in the GUI again, one click, your snapshot is cloned. You may now go view the files on it. And of course we can revert back to previous. So it's got all the pretty typical ZFS stuff you'd expect. So at this point I'm actually going to show you what some of this usage looks like. So you can get a kind of an idea of the syntax. Again, stop me if you have questions. I'll be happy to explain why things are the way they are. Or if you have suggestions, I love hearing from users what can we do to make this better, because I want it to be the best it can be. So first of all, this is in a TrueOS box. I'm sorry the font's a little grainy. I just took screenshots. But what I'm doing here is I'm just running the command warden. That's the main command for everything. And you just pass it a variety of flags. In this case I'm telling it we want to create a new jail. In 9.1 the jails are specified by IP address. So that's going to be your unique name at the moment. I'm hoping to change that a little later. But I'll talk about that in a bit. Yes? Yes. Well okay, I'll let you know here. In a moment, so next thing is the host name Tjail and then the dash ports flag says we want ports. But as you pointed out it says it's installing world. In this case what it's doing is on TrueOS and PCBSD it'll go out to our mirror or whatever your default mirror is and fetch the world environment automatically for you. So it's going to grab it from our FTP or HTTP server. It'll save it somewhere on your hard drive so that you can quickly make other jails later without having to re-download it. And that'll be based on the release. So it'll be 9.1 if you're running 9.1. Like your custom world? Yes. There's an option in the crate flag to specify your own archive that you can roll and modify and customize it any way you wish and then say this is what I want to use to populate this jail. So yeah. Yeah. You can have multiple IP addresses on a jail so I could create this jail and then give it a few other IP addresses later or IPv6 or whatnot. But the IP for that jail has to be unique, the initial IP. That's just the way we have done it for a while. There's some work going on to change that especially for port jails because we want to change it where you don't even need an IP address. So that'll be changing in the near future. But at the moment it's by the initial IP address. That's the way you reference it. And you can see it's just gone ahead and created it in user jails so standard location. In this case, again, same command. I'm just giving it the dashboard jail flag and again it does all the work in the background to make a port jail sandbox for you. And then last but not least, a Linux jail. This is a little more complicated. We're going to go ahead and give it an IP and host name. We're going to feed it the Linux jail flag and then we have to give it the name of the script. So that's where our default scripts are. So in this case we want to do Debian 6 squeeze. And then I truncate it because it does a lot of stuff here. But at this point it's running that DE bootstrap utility. It's downloading, putting it all in the jail for you. And that's where you can supply your own script. So if you want to do something for Fedora and you have a way to fetch Fedora easily or having it sitting on your drive somewhere, you can script that in and say, this is going to pull my Fedora into this jail. And again, please share those with me if you get them because we want to include them as well. No. Okay, so the question was, you know, the jails are not hypervisors, so are we loading Linux kernels? So no, it's not running a Linux kernel. You're still using the FreeBSD. We're using the Linux compact layer for this. So obviously if there's some bug in like a pat layer, you're going to mess up something in your jail. And hopefully more of those things get ironed out over time. I can tell you this has been pretty popular when I talked to sysadmins that are running Linux now and absolutely hate it because they want to use ZFS and ButterFS as nowhere near close to being ready for them. And so as soon as I say, oh, yeah, you could just run that in a jail on ours with ZFS. You know, their eyes get really big. They're like, ah, you know, and you see the wheels turning. Like, this sounds really cool. And they're like, I don't need a Linux kernel. All they need is the user land half the time. They just want some particular app to run in there. So this will do it for them. After we've set up our jails, I've just created three here. Referencing them is really easy, just the warden list. It'll give you a quick, you know, IP list here. What's there? Whether it's set to auto-starve, status, you know, they're all stopped at the moment. And then of course the type. So you can quickly look and go, these are my Linux jails. These are my standard jails, et cetera. Starting, very simple. Again, we're trying to keep the commands easy here. Just warden start, then the IP address. That'll be the unique identifier, that ends up being in the future. And again, stopping, same thing. It's going to go ahead and run the start and stop scripts there. Now logging into the jail. So we have a charoute command, which is actually running jail in the background to log you into the jail. So you can execute that, and it'll dump you into your jail session. See here. Oh, and this bottom example here, I've charued into Linux. That's all I did. So that's what it was identifying itself as. Also, optionally, I don't have it on a slide, but if you give it another argument after the IP address, a command you want to run inside the jail, you can do that too. So if you're in a ports jail sandbox, you can give it user local bin Firefox, and it'll just fire it right up on your desktop, just like it was a local application. So what does this look like? What's it doing in the background? Well, and user jails is our default location that's changeable via the configuration files. But after I've set up these three jails, you'll see I have my warden charoute file. That's my world environment that I'm using to extract the jails, and you can replace that in a monkey with it if you please. And then the jail addresses there, those are the directories, and then we have our metadata, which is where we store extra flags for jails, settings, et cetera, stored outside of the jail. And those are what we use when we're importing and exporting and moving stuff around. And of course, if you're running ZFS, again, you saw in those commands, I didn't say anything about ZFS, it just did it auto-magically for me. So you do a listing, script for jails, everything's in its own ZFS dataset automatically now. So again, we want to keep this as easy as possible. So snapshot support. Again, you can do this off in the command line, you could script this in if you wanted to, although we have some facilities to automate it for you. But all we do is just say ZFS, make me a snapshot of this jail. Done, it'll do it, you can list it, it'll give you a list of all the dates when the snapshots were created. Reverting, again, you just feed it to the IP address and then the date of the snapshot you want to roll back to, it'll start, it'll stop the jail for you, revert and start it back up if it was previously running, so it'll take care of all that for you. Now cloning, so say I have a snapshot from a week ago that has a file on it that somebody deleted, I need to go get back and I don't want to revert. Again, cloning's real easy, I just get my list of snapshots and say, if you have a snapshot, it'll go ahead and clone it and mount it for you somewhere on the file system and it'll give you that address so you know where to go look and you can list all the clones on the system as well, so when you're ready to nuke it, you just run ZFS, RM clone, IP address, the clone you want to get rid of, it's gone. It just takes care of all the ZFS bits in the background. Yes. Clones are... Yes. Not via the interface, you could if you did it manually, if you'd like. Yes. Correct. Yeah, that would be cool though. 9.2. 9.2. Okay. Okay, so in this case we want to do some scheduled snapshots. Again, I don't want to know the details, all I want to do is say, give me some cron snapshots of this jail. I want to start it because you can stop it as well. I want to do it hourly, you could say daily and then you specify the number of days you want to keep, so you could just give it a couple weeks there as much as you need, as little as you need. Some people may want to do more often than that. It's real easy to put that in cron if you would like. It just generates the cron entry for you and you can go hack it up yourself if you want to. But we may add more down the road. Okay, updates. That's another thing we can do for the jail. We can say, check for updates to this jail and it's going to go ahead and run FreeBSD update on it and make sure everything's up to snuff inside the jail for you and give you the commands to do the FreeBSD update when that's done, assuming there are patches. Flags, so you want to set some cool jail option like raw sockets because you're running Postgres or something, well, we can do that. So we can get the flags for the jail and set them. We can just run set, space flags, jail name and then just give it a comma delimited list of whatever flags you particularly want for that jail. You can get them again later and it's pretty simple, again, the interface here and that'll support all the jail flags. What was that? Well, no, you have to set these all as super user. Obviously, this isn't running. Yes. Yeah, yeah, you cannot set any of these. The only thing you can do as a user I think is run the list command to see what jails are on the system, but you cannot modify or monkey around with any of the other jail stuff. You can, if manually, just our interface isn't going to allow you to do that. Well, no, no, excuse me. I take that back. That was the way it used to be. For the port jail now, you can. So if you run warden charoute, my user, Firefox, whatever, it's running it as your user account. I'm sorry, I get confused what eight did. Now this is nine. So yeah, nine does that as your, we use the jail me command as the internal and then it logs in and does its thing. Okay, so that's just some of the back end. What's going to happen? I'm going to break out here really quick and show you guys what it looks like via the GUI if you're a lazy desktop user like me and don't want to remember all those commands. So, shrink that anymore. So this is the first time you launch the GUI here. I've already set up a couple jails. You can see I have a port jail. It's kind of fuzzy there. And then the Debbie in jail is my Linux jail. And we're going to have some cool tabs on the bottom here, which just gives you some info. It's not running. There's no active connections. I have no additional IP addresses on it. What the size on the disk is. We'll have some tools in here for launching a terminal, checking for updates, service manager, user administrator. We're going to get into that in a second. And then the snapshots. I'll come back to that here really quick. I want to show you guys how we create a jail. So, we'll just give it a name. Jailbird is the default. Pick whatever you want. Traditional jail, obviously not a secure password. Give it a second. It's going to go ahead and set up my jail for me. Anybody have any questions or are waiting for that? It might take a minute. They don't have to be. At home, I just give them an IP address on my local network and they just work. Not yet. That is a feature we want to do for 9.2 where you can say give me 10 jails sequentially from this IP address or whatever. Yeah, so that is something I do plan on adding for 9.2. It's just at this point. We don't have the time to go add that back in. So, the jail's gone ahead and been created. Again, that's all on ZFS. What was that? Yeah, I'm sorry, I didn't mention that. So, yeah, it just falls back to UFS. If you don't have ZFS on your user jails directory, it's just going to do all this same stuff on UFS. What you're going to lose is the snapshot functionality. All that's going to be grayed out or the warden will say I'm sorry, you're on UFS. You can't do these snapshots and all the cool things. So, you really want to be on ZFS. Yeah, it'll do the exact same mount points on UFS, user jails IP address. Well, it's not a mount, it's just going to create a directory and dump it there for you. For ZFS, it's going to make that a mount point. It's going to make that a ZFS dataset in user jails. Is that compressive data? No, you can go compress it and set that on if you'd like. We don't compress it by default. I might add an option down the road in the GUI or via the command line to say just auto-compress this. Sure. We may end up doing some stuff like that too. Let me show you how we do that here really quick. Yeah, set the properties on it. Yeah, that would be, again, once we get a little farther down the road, hopefully we'll have all the ZFS options right there and you can set your properties. Yes, that's the plan is to add those in. So, now that the jail is here, we're just going to go ahead and start her up real quick. We're started. So, now that activates all the utilities. So, we have graphical utility for managing users on the jail. I can come here and say, hey, somebody needs access to this box. Let's just give a criss here. I guess an unsecure password again. Yeah, I like this guy. He can administrate the system. That's it. It's on. That user is now in the jail. So, we've just launched a terminal inside the jail. Look at that. There's a user. Chris's directory got created. Just to care of it all for you. Again, that was a couple clicks. Any Linux system in it doesn't know any of the free VSD commands can go and click and get its jail set up. Or Windows guy. I mean, it doesn't matter. I'm not trying to pick on Linux guys. It's the thing to do at the VSD conferences, right? But anyway, so we've done that. Say we've installed some software here. We have a graphical way we can manage the services that are running. It's going to go through and show you what's disabled, what's not disabled in rc.com. And I think by default I had SSH on on the sucker. Yeah, the SSH is running. I could come here and restart it. Disabled, et cetera. Again. Oh, does it say disable that? This is a bit of buggy code. I'll check on that. And of course, we can do the check for updates via the GUI as well. It's going to do the same stuff you saw in the background before. In this case, it's not going to find you things. I don't have a network connection. You go away. Now the fun stuff, snapshots. So we're on ZFS. Again, if you're on UFS, this is going to be great out. It's going to give you a nice little warning saying, I'm sorry, get a real computer and run ZFS. Okay. So I've just gone ahead and created my first snapshot here. I can go ahead and make a whole bunch of them if I like. And then I can scroll back through time and see them all. If I can see where I'm clicking here. Organized by date. Great. I want to restore it. I can hit restore. It's going to roll back. In this case, though, we'll say I just want to grab a file off it. Wonderful. It's gone ahead and mounted this snapshot for me and tells me where it's at. I can start browsing that. And when I'm finished, of course, we can just unmount the snapshot. So that's how it works. Again, scheduled snapshots, pretty self-explanatory. Just hit the pull-down button for the amount you want. Last but not least, we also do package management via the GUI for it. So you can come in here and say, hey, I really want to get some Apache packages or whatever. Just click on hit apply. Petch is from our server and you have Apache running in the jail. Right now, for 9.1, we have a pretty limited set of packages we're offering for the jail. For 9.2, we're going to move to PackageNG and start building our own entire repository of everything. So hopefully, you should be able to go here and grab any of the ports or packages from the FreeBSD tree and have it available. And it'll keep those up to date for you. I can't show it to you here on the screen, but on our tray, we have an update manager that runs just like most desktop operating systems. It's smart enough it'll actually check your jails, too, when it's checking for updates and come up and flag you, hey, in this jail, Apache's out of date. Maybe you want to think about doing something about that. So it's got some neat integration with our other utilities. Okay, here, last but not least, we'll say I've made this jail on my desktop again because I'm lazy and I like to use GUIs. I just want to save it somewhere and it's going to export the jail for me. That's going to go ahead and take a moment, but it's just basically compressing it and dumping it to an archive file. Eventually, I may do some stuff with ZFS with that to make it a little neater, but that's how it works for the moment. While we're waiting for that, luckily, I've already have a virtual box running with the same jail or another jail that I created there. So we'll say this is my server sitting under my desk or down at the colo or whatever, and I've sent my archive file and I'm ready to roll. So I can do warden import and then give it the archive file. Now, cool thing is you can change the IP address on it as well. During the import time, there's flags that change the IP and host name, so if you've done it on a local address and you need to give it your public address at the colo, you can specify those on the command line. That'll update the free VST IP addresses and like rc.conf in the host file. It won't go update all your services though, so if you have Apache or MySQL set to internal IP addresses, you'll still have to go set those by hand, but it'll at least get it up and running so you can SSH into the box and it'll have the correct IP and all that'll work out of box. There we go. So now it's going to go ahead and import and when it's done I'll have a fully fledged jail ready to roll. Are there any questions really quick? Well, I'm moving some of these windows around. Yeah. DDoop? Yeah, yeah. Okay. So DDoop, some of my coworkers at IX turn all shades of gray and white when you mention DDoop and their experience with FreeNAS with that. So yeah, you could potentially go turn that on. I don't have any options to do that right now because it's a memory hog and you can potentially, I guess, John was that you can corrupt the entire Z pool if it runs out of memory or something. All I know is as soon as I mentioned it to Josh, he's like, no, don't give users any ability to do DDoop. Like that's the last thing you want to do. Yeah. Yeah. Yeah. Use compression. Use compression. But yeah, so no, we don't offer that out of box. I mean, if DDoop at some point becomes more stable, then yeah, sure, I would love to have that on. Yes. Yeah, I actually, I've looked at that same, was a walkthrough on how to set that up and that's something interesting. We may incorporate something like that down the road. Yeah. That's the thing. It's like a whole new world now with all these things with ZFS and what you can do and it gives me a lot of options. So we're definitely thinking down the road we may do some of those things. We're going to steal a lot of ideas from the other jail programs as well. Yes. Well, this is one I exported. So this was a jail. I had it on my desktop and I exported and that could be whatever was in the jail. All the packages. Yes. By default, it's going to use a blank free BSD environment but you can provide your own image. It's free created. Yeah, it's an image of ours. Yes, it's just a stock. Correct. That's where I would like to go with it eventually where we just send it over to ZFSN and it's done. Yep. Yeah, there's a lot of cool stuff we'd love to do with that. And of course, I don't have to be the one to write all this. Patches are welcome. It's all in shell. It's real easy to hack on. So feel free to send me some. Yes. It's really old. This new stuff hasn't yet ported yet. I have to do some refactoring of it to put it back into the forks tree. It uses some new libraries that I have elsewhere. So I hope to do that after 9-1 releases. So I won't leave you guys out in the cold too, too long. Okay? Okay. So we've gone ahead and imported our jail here. You can see it's there and good to go. And it's made the meta directory and it's made automatically the ZFS data sets for it as well. So I could make this on my UFS desktop even and then send it to the data server and then get all the ZFS functionality. It's not going to limit you just because you created it on one. You can move back and forth if you'd like. So, okay. And over here, this one finished exporting. Really quick. Let's just fire up the old Debian jail. This may take a while. I don't think without my networking how quick it's going to be. Okay. So Linux is up and running. No. Okay. I have some slides on that here in a moment. I'm glad you asked. We're going to talk about that in a second. So you can see we're running Debian in here. App to get actually worked. I mean, if I had a network connection I'd grab something for you but oh, I don't know. What do you got? Oh, it's already installed. But yeah, I mean, you can run their native package management all inside the jail. You can do that and give it to a Linux guy and he can go install whatever service he needs and just be happy to know it's running on the previous D in the background. Let me go back to the slide portion of my talk here. Okay. So we've taken a look at the GUI now thinking ahead. What are we looking at doing here in the future? Well, the first thing I mentioned before we're looking at doing jails without an IP address. We're going to just drop that so we can add whatever we want without IPs. We actually want to borrow some code from Freenaz. Freenaz has some really good snapshot support for ZFS with the off-site replication. They've done a lot of work on making that solid. It's a Python module, so I'll have to see how I integrate that. But I've been told that's the way to go because they've already spent the countless hours to debug it and make sure it works. So we want to integrate something like that into the warden as well. Of course, additional Linux distros definitely want to see those. So we're going to add a new package in the repository, so hopefully we'll just have every package available. We'll create our own server set with special options for inside your jail. Another feature we want to add, nobody brought it up, is 32-bit jails on AMD64. Right now it's going to use the same architecture as the host, but I would like to add out a flag where you can just say, okay, this is cool, give me a 32-bit jail. Really simple to do, just need to sit down and get it done. We want to do some stuff with ZFS and not using archive files. That should make the jail creation almost instant. And then one thing I want to do is you know how I showed via the command line, you can set jail options like allow raw sockets or whatever. We want to add something in the GUI or just list all those and you can just click, click, click. I want those options done. You don't have to know what the actual flags are. And as you mentioned, Linux utility. So as we start seeing more Linux distros show up in the warden as jailed Linux is, I want to add some support so that once you install the Linux YUM manager or something or some graphical utility for administrating your Linux system, it'll just add the icons right to the warden where you can say, okay, launch the Linux this. It'll pop it right up. It'll handle all the X messiness in the background so you don't have to worry about how that's working. And then you can administrate it via their graphical utilities as well. And we might even do something with their update management that way. Additionally, that may be a little trickier integrating that into my system tray, but if there's a way to do it I'll definitely take a whack at it and see if we can get it done. So that's the end of what I have prepared. A lot of info up on our website and Wiki page. Of course, comments are always welcome. Patches are more welcome. But I'll be glad to work with anybody and if you have good ideas, this is still a pretty fresh project. A lot of stuff's going into it. So I'll be happy to entertain thoughts and see what we can put in. Yes. I don't have that via the warden yet. Again, that would be a cool feature if I can hopefully... Yeah. Yeah. I'm not going to commit to that for 9.2. My list of wants is already getting rather large, so maybe a 9.3 or 10 feature. But again, those are cool things. If you email me or put them on the Wiki page as a suggestion, it'll eventually get put in. Yes. Any other questions? Yes. I don't at the moment. Okay, Dan has... So Dan's looking for the secret sauce. He doesn't have the secret sauce. Is that the deal? Okay. Cool deal. Okay, guys. Well, if there's no more questions, I'll be around for the rest of the show. Feel free to come on by and I'll be glad to talk to you more if you've got more internal stuff you want to know about. Thank you, guys.