 So I'm Owen Taylor for those of you don't know me. I am work at Red Hat. I Have my role as the architect for our workstation efforts. That means that I mostly do a lot of Both planning tasks and coordination between workstation and Red Hat's server products and do some more things on the Fedora side so my title of a talk may be competing for the most Obscured title of the conference but so it's talk is what's Fedora's alternative to VIHGTPD.com So what I'm really going to be talking about is how we move from the old-fashioned way of doing development the way of doing development that was a good idea when It was amazing that you had this this links computer that was just like a server, but you was on your desk and To a more modern way of doing development that really makes sense in the new world of containers and virtual machines when you don't really have to Have your workstation and your server beat exactly the same thing and how can we keep advantage of that? So I want to solve off That's one second here while I switch Okay so So I want to talk a little bit first. It's about How Fedora is for developers because it's all about making for better for developers, and I think you could say that Fedora is great for developers Look at develop the for developer portal is a new effort. It has a lot of great information about About what's available for Dora and you look at it You see we have all these different languages available and not only do we have this packaging available, but it's Very quickly updated after six months of the new version of Fedora out with new versions of all these different languages and all this was libraries that go along with it It's not just and it's not just Languages it's tools we have You know Docker and vagrant and board builder and all these things you can Use a separate development environment and different things On the other hand for is awful for developers We've all these different Software available if one gets started you say well, what do I start with? We're gonna say it's on the same level. We show you Python and we show you Go and show you elixir and what what do I start off with we've all these different tools we have You know do we use Docker do we use vagrant do you use work older? We're not getting any recommendations there we Ever six months we do an update with new versions of all the software so if I want the next version of Python well, I need to upgrade my my desktop to the new version and What if what if some version project we're working on once ill version of Python then I have to choose upgrade or not To choose to upgrade that's not a very good situation. We really don't want our version of our tools We bound to Are the desktop are running and have to if I need a new Version of Python I shouldn't have to do a system upgrade and even though we update every six months That's still not past enough a new version of no JS comes out It might be six months until you get to use a new version on Fedora. So that's not so good and You know one of the manju we say of Fedora that didn't mention is that we don't really bind you to any Web service. We're not trying to sell you any online. You know, we're not saying We're not a AWS. We're not Google App Engine. If you do open Fedora, you're developing using all these open tools But on the other hand you get to the end of the day and you write the coolest new application at Fedora How do you get you get out to your users? We don't provide any help there. You have to then figure that all out for yourself so Just to talk about development development can mean a lot of different things I just wanted to quickly say what I'm talking about here and what I'm really talking about is web development Server development back-end development. Um, this is you know a large chunk of the Development market and it's also really where open source is strongest. This is a world and where open source tools Have a great deal of mind-share You know, there are other important types of development I think one other thing we see important enough Fedora is excessive computing and big data. That's Definitely something people do. It's not necessarily writing application for all people is often writing application to writing code for yourself Playground with data Native native application development is also very important It's not like there are a lot of people sitting out there writing native apps for Linux or especially, you know maps for Linux But those are the apps that make our desktop work really well that make it compelling We need to support that and I'm not really going to talk about that But we're doing a lot of work in the workstation to support that with We're working good on Builder flat packs really make this a whole lot better It's not the same principles that I'm going to talk about here are Are found in that work, but it's a little bit separate Fedora has a lot of people doing low level development to doing the kernel They're doing the system the development that already works pretty well. I'm not going to say we should change how we do that You know, then there are types of development that Maybe there are less influence over if someone's doing a mobile app development They're probably using you know the tool provided by Apple or by Google and we can't really make that better or worse It's just what it is and you know game development is a thing of its own. So and this is not comprehensive There's IOT and so forth, but the main takeaway here I'm really talking about the server side development because that's where We should have a biggest presence and where we need to we can make things better for people So the old-school development was the VIHTPD.com Where I just start start off my editor. I've started editing thick files my system You know, I see what see what happens with that, but what is what does modern development mean to me? modern development means that Your development environment is not your workstation environment necessarily You're a user container virtual machine So you have a development environment which is isolated from your workstation and I can if I want to develop for CentOS On the door I can do that. I want to develop for Fedora 25 and Fedora 24 I can do that and I have this You know, I can cleanly separate that out. Flatpak is a different way of separating that out That really applies to more desktop applications where we say the runtime for Flatpak is different from your desktop runtime Your development environment should be reproducible You shouldn't have to spend Days setting up your workstation or VM in the right way to come get something to compile and then Have to if you need to reset that again start over from scratch You should actually have recorded exactly what you needed to do to set up your development environment Hopefully that's very simple and you get going and in fact Hopefully that development environment is actually Recorded in your git repository. It's part of your project configuration So that everybody can use in the same development environment. I think anybody who has worked on a significant open source project has Found that one of the hardest problems of getting newcomers to in is getting them Getting them going on development environment. How do they get your software to build? Why is it working differently on their machine than your machine? You know, we with GNOME, we spent many years creating GH building to the system to try to make everybody's development environment Enough alike buying and selling system packages by rebuilding things and generally, you know, if I'm actually working on a sort of application Every everybody regardless of what operating system they're using on their desktop should be able to use the same development environment and Often that same development environment can be what you're used for testing and even what you're gonna use for the deployment Versions can be the same across all of those. That's what we can really have in a that's what We can have these days. So Now it's sort of changing gears just a bit I want to go back to this idea of we've all How we're displaying so much choice to developers on Fedora We're displaying all these different options and why should we narrow that down a bit? Why should we figure out? What's the golden path for developers? Well, you know, one thing is that having diversity It's here is good. But that's really putting a lot of Responsibility on the newcomer the person who's coming into Fedora and says I want to create a web app We're saying well, there's pros and cons to all of these go research this on the internet and figure out what you want to do That's you know, if we have opinions we think that things and some things work better We think some things are more free software Then we really have the responsibility to make your recommendation. We shouldn't just say It's all good. You figure it out We also have the case that we don't really Know how our users are developing with Fedora. So we can't actually have good tests for it. We When somebody it comes in and says I have a hit this problem Someone will probably tell them to use something different say you're you use Fedora. You try to use vagrant on it You hit a problem. Somebody says, oh, you're using the libvert back into vagrant. Yeah virtual box one works better. Why don't you try using that instead and We don't say which one is really our standard. We're like, yeah Okay, there's some problems there people can work around them. Well instead We should know what what do we are we are recommending people use vagrant? Are we recommending people use vagrant with libvert then we better make sure that works out of the box? so If we know what our paths are we can really make sure that they work well and not only work well We can make sure that they work slickly. We can make our own tools documentation Center around certain paths that we think work well and provide a really nice experience instead of saying here's a terminal Here's a list of packages you can install with DNF have fun Tell them just came about decisions not only do you have to know like why should we make them? We have to know how we should make them and I guess there's two points. I'll say there one is that We definitely I'm not saying we should have no choices. I think it's very reasonable to somebody coming in to say I want to program in Python. I want to program in JavaScript. Give me different recommendations about how to do that But you can't have too many choices You can't have to choose your if you're saying first chose your language then choose your development environment Then choose which database going to use with it to choose this and then choose that We're going to basically we've lost any sense that we're actually able to provide a curated experience So we want to provide a small finite set of choices and then within that we need to engage the communities To tell us what the best of three practices are we really should be going to appeal state developing with Python on Fedora and say well How do people do Python development? How do we go down to our tools? What's the best way of time put an environment for Python and the same way with no JS or rust or whatever other Working on because we can't invent entirely new different ways of doing things on Fedora and in the end Fedora is not the right place for somebody to ask, you know a question about A compilation error that run into with rust we can't have our Fedora specifically doing rust We need to make sure people can go to upstream community and say I'm having this problem and then how that makes sense So we need to basically figure out what the best up-stream practices are and build our sort of golden paths around that And then you know if you are saying okay, there are certain develop ways of helping we're promoting well what about everybody who Develops a different way well, you know one thing I'd say is that we need to make whatever we're doing extensible and generally Flexible so that you can work as you're used to but use our tools when they make sense But we shouldn't be to the point of saying Extensibility means that anybody can add to our set of options We shouldn't feel that just because somebody has to grow out how to use our tools with the elixir and Logged about that then we have to offer elixir as a top-level language of choice I'm picking an elixir because it was on the real product or a project at Oregon I had not heard of it before but maybe that's the new hot thing and it's good if you are an illiterate. I apologize So And then I mean as I said if we pick our paths we can clear road Roadblocks, I think we know some of the roadblocks people typically hit on Fedora networking with virtual machines can be a real pain you can There's different constraints if you're running as Liberty's a system or as a user and Often that can be a real pain point We know that permissions and escalation can be it hard for new users and some of this is just a question of documentation like if you There's in Docker now if you want to mount a volume under Fedora There is a special option you can add to the mount to say fix up the SC learning permissions This is great. This is Is a really nice thing that was added, but if you don't know about it You're going to have a world of pain until you find it somewhere deep in the man page and then but mostly what I'm going to talk about here is how to create a slick experience around I'm doing on Fedora and so if you were at the last talk you saw Richard Hughes talk about things he's been working on for five years that he's worked through with develop with the designers And I've gone through many iterations. I'm another hand going to be showing some demos of stuff that I spent about three days on so This is not necessarily Anything that's going to move forward, but it's Basically just showing off my some of my ideas in code so the first thing I want to say is that we need to have Tools that have just enough smarts and just enough knowledge of our conventions to be able to work effectively with people's projects So the first one I'm going to show off is something that I've called for working purposes FedM It's basically a tool that understands common project conventions. So So say I have a little bit of a room in okay, so here we have a little Think I'm actually going to move Recording streams look at the screen and sadden see if that Because I don't think they make much sense with it just be talking, but we have Hello Python program and if you know Python and you see a directory called VN inside a Python project you're saying Okay, that's probably Python virtual environment. It's one of multiple commands people use for setting up virtual environments under Python but it's a somewhat recognized one so and Well, how would you activate that environment if you were you know, if you know that it was sourced been VN been Source been the end didn't activate that's something that somebody who's worked with Python probably understands But since you know we can our tooling can understand connection to so so if you fed FedM shell that brings up a Shell This is a few things it changes to the prompt to say I'm working on the whole Python project it if it added the VN been to the path there, so now if I take Python I get the localized Python which use local versions of the libraries and you know, I think the only other thing it does here is if It changes it sets a medial is for CDs. So if I see the somewhere else that it CD goes back to the project home instead of my home But it's really a very simple tool and by itself is probably not all the interesting that is if you're working on Python You probably figure out how to use Which one of our minutes and there are Python specific tooling like Auto M to do similar things in a way that I'll do a recognize But the nice thing about this is if we start building up conventions saying that our projects live in under capital P projects and That They're set up in a way that said that recognizes them can build higher-level tools that work on that so I Wrote a little graphical program called Again for working purposes new term that basically understands this project structure So if I go to the activities overview now and I search for hello Python, I guess what results coming from new term second search results just from my terminal, but and then if I Turn there it opens up to my other monitor. So let me drag this across Then I have a little terminal here You know this is We see here. It knew that it was starting up into a project directory. So it internally runs fed that then now it has you know Has a path set up. I probably a little bit hard to read here, but it has the path set up as before If I create, you know, if I create a new tab here It's also going to have the same path set up. And one thing I did is well The some of the prompt information didn't have to be stuffed in the prompt now I had nowhere terminal there so the project name is up in the left-hand corner instead of being Stopped into my path And then you know demo a few more things that this does later on this talk here but the basic idea is that now we've we've made it navigation part of the Desktop something that's aware of it because we have an app that actually knows about projects and they can then show up an activity search well, if I just had terminals and You know I'm sure doesn't understand anything about a terminal and definitely don't understand what you're running inside the terminal and If I have a different project here, I will finish Here's this is another project here that I have in the same my my capital P projects directory And this is a node.js on project and just to Demonstrate that it's that we can be a little more general by echo Half in here. We see that it knew that and for node.js directory that under node modules Dot bin that's what you need to have in your path. So you have to set up something different for a node.js application So okay So that's Part of the solution here. I'm talking about that. We understand projects. We understand how to set things up We understand how bring that into the desktop But I haven't really gone to the other product what I was talking about which is the idea that you're that Your Let the development environment is not your workstation environment I mean Python virtual and sort of solved it a bit it means I have a different set of packages there, but It doesn't really address the question of saying what if I want a conversion of Python? What if I did want a different version node.js? so The other thing that other trick that FedM know is is how to set up a container quickly with a different set of packages and And get you into that container. So let's get out of So that's I'm going to do this in the normal terminals. So it's clear what I'm doing So let's see. I'll start with Fedora 24 and packages will want node.js Well, I'm going to put in there I just very simple file which says that I want to use a start with a Fedora 24 Docker image and also include the node.js package then What's that now? But now if I do one time shell But it before this would have just said okay. It's a node.js project. Let's set up using system packages But now that she's at Fedora YAML there it created a little Docker file that the appropriate contents and it said Okay Okay, I'm actually going to scroll up a little bit on there to See what it did It saw some some basic tools like get and less in there Then it installed the package I listed there and then it Added myself inside the package there inside the container and then gave me a shell inside the container so This was very very fast because it was cached that was I had done it previously Because it would take so I can scratch probably about a couple of minutes if you had to download the images Maybe more phone a conference network So see so where am I now actually I'm not in my home directory. I'm actually in slash projects angular phone cad It's been down in there inside the container If I do a RPM I Don't have two north Virginia packages installed. So clearly I have a much smaller and cleaner package set than my workstation would show and and You know basically just have a fully working environment there and I could Have used a different version of Fedora I could use centOS instead of Fedora and it would have given me a different type of development environment And I think as we go forward with Fedora in modularity. We'll see that There's more ability to say that I want you know when the next version of the gs is released I'll immediately be able to get that from Fedora and We'll probably be breaking up the Fedora temple a little bit so that We don't have the problem that you necessarily have to wait for the next version of Fedora to get the next version of software So I think even more you'll be able to pick the version of the software you want But already by just saying that I can get an environment without having to Change things on my workstation I made a big step forward and this actually becomes a lot more important with atomic workstation where we're saying that our Image for the system is actually a fixed image RPM layering gives you some ability to Get around that saying we're to install something on top of the standard atomic workstation image but it has the Basically limitation of losing some of the bandage of atomic workstation As soon as you start installing new packages on top of your works atomic workstation image Then you no longer know that's going to upgrade cleanly You know you have some I Think it's a lot more complicated So this is meant to be a way that will work both existing Fedora and with Future versions of it of Dora where we have a fixed based image in apps layered on top This is a way of layering Fedora development environment on top Okay, so So that's sort of how you open existing project We also want to talk about you know also want to provide ways of starting a new project and you know I think this is The idea of a new project wizard is pretty well established. We had it with developer assistant assistant and I Want to show off that what it looks like in good own builders to sort of show up the Good own state of the artists around that So if you When you don't build her you see eight offers you to you know, one of you use one of your current Projects or you can create a new project And said offers to you create a project from a dr. Granier's computer or from Gary postory or from a template and Then you have your choice of you know you pick your Enamed project But you pick your what languages in right now builder offers. It's a very small set of templates Which are very much oriented around development. So I don't know yet whether if we're doing something That's not our own development. Whether we actually want to use the builder code base or to replicate The same sort of interface for For Command line projects, but this is sort of the kind of interface that I've been to see having right now. I'm just going to demo this Create a new project from the command line very much So Very much simple. I'm just going to say Fedem Create Django my Django project. Let's hold it right it would It shows that there's no actual template system. There's just one hard-coded template there So goes ahead and does a bunch of stuff sets up the the containerized environment Now it's actually sets a virtual environment, and that's going to run the sort of Django set of tool then I played my Django side Can bring it up in the terminal here, and you know it has Throw a skeleton Django setup there. It has a virtual environment And it's all set up for me But the thing here is this is the same set up to get if you follow Django tutorial from the website We're not creating a new way of doing Django projects at this point You could just go ahead and follow the Django tutorial straight through and it would all work and if I do This is demo effect Yeah, I just don't know the offhand know the option to Well the demo here, oh, I take control see here And so one thing I just points out here is that it's not a it's actually the Because it's for development and because we want what shows up in the Django tutorial to just work the containers actually sharing the same The host networking does not it's not using a separate networking thing because generally That basically creates a divergence between what people expect upstream and what you'd actually have and you'd have to know what the IP of the container was and that you know, that's Pretty straightforward and you could do that whether or not you have the all the packages installed on your host system or not and you can do it with any version of Django that's Available in Fedora So that's essentially the answer, you know in very rough sketch of what my question in my talk title presents is that we want to be doing things in containers What do we do things like upstream and we want to have tools that make it slick and straightforward to do that Now this is gets you Sort of started, but we actually need to provide the user support from end to end We can't just say that we're gonna get you started with a project and then leave you off And this is where I think that we've why Dev Assistant never really Caught on his Dev Assistant was something that was very useful to create a template to create an initial project There, but it didn't offer anything to an experienced user So there was no reason to actually engage with Dev Assistant unless you didn't know anything about About getting started once you actually knew the the tools that were behind Dev Assistant it became a little bit unnecessary overhead and The idea here is to inside create tools that actually are useful for experienced developers for people who already know what they're doing and you know, that's often going to be by actually providing the necessary bits of user interface within the application within the term application to let you move forward in the in useful ways and this is a Sort of it quickly Locked the example of that So so if I do a get init here get add I Now I see over here note the Terminal program noted that this is a get project It's figured out on the master branch if I get Tech out there should be Fixed get a new branch that will notice the change of the branch there. So that's Freddie it's a little bit new interface again. This is something that most people have set up What if they know how in their prompt? But that's another, you know, you have to find somebody to tell you how do you set up your prompt forget? Okay, did you do that correctly? Then you have get prompt and then there's only so much you can stuff into the prompt I mean at some point your prompt screen becomes like a half a mile long and I you know similarly we could do things that for instance if you have a You actually have a more production doctor image That you're using to test your application set up there. We could provide the sense of that in the user interface or Basically anything that sort of useful connections textual information with a project We can provide within the terminal user interface and not just require everybody to do it by stuffing things into the prompt But but again, it's not a question of did you have to go out and use Get an external get tool to get this We're trying to work within how people are working within a terminal because we're basically creating better ways of Working within a terminal, but we should also integrate well with the external tools when they exist So maybe next to this is a button to launch get G on the same directory there And you know if you want they got full view So, you know, then we're proceeding on from here. We have to continue Um Can you want sort of the Introducing the best practices there So how do you package application for deployment? Are we using a doctor file? Do we want to his open ship something interesting for Fedora? We have to figure that out We have to provide the ways to make it easy for people to take those steps there And then you know, I guess I'll leave this open question, but as a final question We're not done until the app is actually deployed someplace. So just having a development solution Isn't enough we actually have to know what are we recommending for deployment? Are we telling people that you need to install Fedora server someplace? Are we telling people that you know, you should write open shift application and find some provider who is offering hosting for that or some other format? I think it's a It's a very hard question because Fedora doesn't sell anything we don't provide any web services, but you know, I think it is Something we all have to keep in mind and recommending how you create your application is how we were eventually going to deploy it And there might be multiple answers depending on you know, what you're interested in but there has to be some answer there So that's basically what I wanted to talk about today So, you know, you can find me on to our workstation if these kind of things interest you or email me And I guess this point I'd asked for any questions or comments people have Yeah, okay. Yeah How much of this I mean most of it doesn't look known dependent but some of it looks You have the terminal starting. Yeah, that's that's not really a No, no dependent thing. Well, okay. So what's the no dependent here? I mean clearly the underlying command line tool is nothing to do with you know But the application that I'm running there in this new term as I call it is Design is intended to be designed according to good own bit that guidelines that fit well into the good own desktop It should be totally runnable and our KDE or XFC as well. It might not be quite as slick I mean it provides a good own shell search provider if you're gonna know so you can search for things in the shell But I mean I think probably you get a lot of the benefits under any desktop. You just might get a little bit of mismatching UI Well, I mean it it would come up the title bar if if you ran it under XFC you would come up with a minimal title bar. I think if It depends a little bit. I mean it depends upon whether JK things that your application will be able to run something without a separate title bar and whether the application is using the It's the application is using the app menu to display important things and that will go up in the menu bar Yeah, so I mean, you know we do pay attention in within the GK project to be able to make app that that adapts between different desktops and you know that if that Could be prior some app support But I definitely would expect that it would work right like like an own software will work on any desktop This will work on any desktop it may but it's using the good own design language or it would eventually use a good own design language now instead of Whatever I hacked up in two days Yeah, so How would you market this to developers and get their mind sure because I think that assistant was a great Yeah, somehow I see it slowly dialogue. So I mean I think so that assistant, you know, I mean I think there is a couple of things That and their devastation one is I think just basically that it didn't really offer much to somebody who Already knew what they were doing, you know, it basically was you know, I don't know how to Check out the package from GitHub. I can use debit DA tweak GitHub whatever and so so basically said if you don't know what to do You can figure out the deficit command line or you can figure out sort of native command line That wasn't necessarily a win. So I had a lot of knowledge about projects, but it was All pushed up to the part of the starting area. That's one sort of thing I think hindered that assistant and I think also the the UI never got as much attention and love as the command line and I think that means that we didn't have a lot of cool, you know videos demonstrating That assistant, you know, I think, you know, basically my idea for proteins would basically to You know, make it slick, you know Make it work make it be actually useful for people make sure that we get up Contesting among ourselves to make sure that's actually something that we should be promoting No, and then then you know go out and tell people about how it makes your life as a developer better, you know and how it's And I think that I think it can be a powerful message I mean just to show people I think there's often this sort of dichotomy between terminal and Design that is your design. They're entirely within the terminal based upon command line options or you design these interface And I think that that's not a dichotomy that we really need to have that especially on Fedora where the terminal and separate element is very much what we're focusing around We can have both we can have things that are people who want to work in a terminal That are more than just a terminal Yeah Not really, I mean I can put it up. I mean I like I Can definitely put up put up the code off somewhere and it's it's real code There's nobody behind the person there But I think basically I mean before I really say it's ready to distribute to one thing I'd like I need to do is have some buy-in from the good own designers that this is sort of interesting way to go on that and because without that it's It's basically just my toy project is never going to be good And then the second thing is it I would have to sort of figure out a bit more about naming I don't think new term is a final name for this So so that those are sort of the the but I mean I so I'll try to Talk to more people like Wattic on the genome side to sort of figure out how to sort of them the overall genome design and you know if it then if that looks good, then I'll Probably put up somewhere and offer for hacking. I don't I don't want to jump gun too much on that. So Okay. Well, thanks everybody