# Future of FreeBSD Design



## CreativeGPX (Aug 23, 2014)

Being built on such a mature base, a lot of things stay the same in FreeBSD, but also, plenty has changed in the past ten or twenty years. How do you think or hope FreeBSD will have changed in the next ten or twenty years? (I.e. ignoring the tiny short term details.) Do you think it will be basically the same and all we'll have done is focus on getting more ports and drivers? Do you think changes in the industry and technology will lead to fundamental changes to any of the parts of FreeBSD? Do you think any parts of FreeBSD are likely so good that they will "never" (i.e. not in the next few decades) need to be changed?

I'm just curious. I know we're a pretty static group.


----------



## drhowarddrfine (Aug 24, 2014)

And a lot of things have changed. And a lot of things will change. Just like any software. I don't understand why you think it hasn't or won't. FreeBSD hardly sits still.


----------



## CreativeGPX (Aug 24, 2014)

I didn't say it didn't change. I said, "plenty has changed".


----------



## SirDice (Aug 25, 2014)

CreativeGPX said:
			
		

> Do you think any parts of FreeBSD are likely so good that they will "never" (i.e. not in the next few decades) need to be changed?


Although I would like to think it's so good nothing will ever need changing, I'm sure everything will at some point. Ideas change, solutions change. What appears to be the best solution right now may not be the best in the future


----------



## CreativeGPX (Aug 25, 2014)

Yes, yes. And that is why I'm asking if you all have any ideas on what that would or should end up being!  It's okay that it's only an educated guess, I won't hold you to it. 

As one example, I'm very interested in linguistics and languages so one example that interested me is the implications of changing the language we use to describe an OS. Microsoft's research OS Singularity was an OS that used C# with specification language modifications to develop the OS which initially sounds like a terrible idea. However, using the language enforced safeties, the OS itself was able to be a bit lighter and more efficient than traditional OS's while maintaining safety. By the design of the OS, things like changing address spaces and running in protected mode were optional features (sort of thought of in the way that you think of grouping things into Jails in FreeBSD), while the standard approach was language enforced and compile time protection. Midori which came after that, I believe was an extension of Singularity that was highly focused on building on that and making the small assembly code portion be provably correct (i.e. provably free of a defined set of common OS errors). I think they came up with a higher-level assembly language for this purpose. It's a very interesting idea. The main downside is that you can only use the language safety to counteract the higher-level language performance hit if every single thing is written in a higher level language like C#. This means that gradually rewriting an existing OS in safer languages would result in it being much slower until the 100% point is reached, where you could start pulling out some checks and securities from the OS since the language provides it.


----------



## kpedersen (Aug 26, 2014)

CreativeGPX said:
			
		

> Microsoft's research OS Singularity was an OS that used C# with specification language modifications to develop the OS which initially sounds like a terrible idea..



It was a terrible idea (albeit interesting for research). C# couldn't pull it off, it required a pretty large change of language to Spec# and finally to Sing# (with some bits still done in C). Personally I find it a bit of a waste of time when C is perfectly suited as a systems language and thus the correct tool for the job 

C# and Java are not meant for this kind of thing. They are more akin to userspace scripting languages like Python, Ruby, Perl, etc... An area where C and C++ also happen to be very popular too.



			
				CreativeGPX said:
			
		

> This means that gradually rewriting an existing OS in safer languages.


The only reason why these are called "safer" languages is probably because they are constrained to running inside a virtual machine. Have a look at Microsoft's C++/clr:safe compiler or Emscripten and you will realize that "safeness" has little to do with a language.
The problem with a virtual machine is it still needs to be written and maintained using "unsafe" / native languages, effectively reducing size of the benefits considerably.
Now I do see some benefit of using C++ rather than C in userland programs, i.e you can avoid the risk of memory corruption (using .at(i) rather than _ in some places), however since the FreeBSD code is already in C, it simply isnt worth the rewrite. I also think something as complex and changable as C++ should not live in a kernel. I certainly don't believe something like .NET should be in a kernel (or a computer for that matter... )._


----------



## CurlyTheStooge (Aug 26, 2014)

kpedersen said:
			
		

> I certainly don't believe something like .NET should be in a kernel (or a computer for that matter... ).


You, my good sir killed it there!  

Regards.


----------



## beastDemian (Aug 28, 2014)

I hope, that one day we become a hybrid kernel, with a userspace powered JIT firewall (which was one of the projects for the GSOC this year) and maybe a new init system that takes full advantage of SMP technology but doesn't have any of the flaws systemd's init has. .



			
				kpedersen said:
			
		

> I certainly don't believe something like .NET should be in a kernel (or a computer for that matter... ).



Well, .NET MVC is a pretty solid framework for making webpages. That being said, I agree: having a garbage-collecting language in the kernel is the last thing you need.


----------



## Juanitou (Aug 28, 2014)

You could find this link interesting: BSD XXI Manifesto, by Wojciech Adam Koszek, though it has not sparked a lot of interest on the FreeBSD lists.


----------



## protocelt (Aug 29, 2014)

Juanitou said:
			
		

> You could find this link interesting: BSD XXI Manifesto, by Wojciech Adam Koszek, though it has not sparked a lot of interest in the FreeBSD lists.



A few really neat ideas, but put together it seems a bit too much like a "FreeOSX" to me to be honest.


----------



## kpedersen (Aug 29, 2014)

protocelt said:
			
		

> A few really neat ideas, but put together it seems a bit too much like a "FreeOSX" to me to be honest.



Agreed. And I really have tried to like some of the ideas but I really hope that time is not spent on implementing any of this. They all sound a little bit too novelty and I question their usefulness in the real world. To be honest, I doubt Apple will implement any of these either because they are effectively a little bit pointless


----------



## bsdkeith (Aug 29, 2014)

There have been, and still are, a few people trying to make FreeBSD into a desktop system for the masses, but I do believe it is so strongly oriented to servers that desktops will remain a sideline. 

FreeBSD was and is a server OS, so I see this side being the focus of any future developments. We used to have thin clients running from servers, now we have clients using The Cloud, perhaps this is where we are heading, personally, I prefer to be in charge of my own data, but a lot of users are happily using web based storage solutions today.


----------



## sossego (Aug 31, 2014)

That is a cloud.


----------



## tmp (Sep 26, 2014)

CurlyTheStooge said:
			
		

> kpedersen said:
> 
> 
> 
> ...



After catching oysters from the C,
wrestling waves infernal;
All was well, I grabbed a shell
and viewed my newest kernel.

I looked forward to my C with brie,
But my hope became regret.
The seagulls `awk`ed,  my face was shocked...
There was nothing inside my .NET.


----------



## youngunix (Sep 27, 2014)

tmp said:
			
		

> CurlyTheStooge said:
> 
> 
> 
> ...




```
using FreeBSD.tmp.Octave;

public void main (I return NADA, Because I can)
{
   var act1 = "After catching oysters from the C, wrestling waves infernal;"
   var act2 = "All was well" 
   var act3 = "I grabbed a shell and viewed my newest kernel."
   var act4 = "I looked forward to my C with brie,But my hope became regret."
   var act5 = "The seagulls awked, my face was shocked..."
   var act6 = "There was nothing inside my .NET"

   if (act1 && act2) && (act3 && act4)
       console.write(act6);
   else
       console.write("use it till you see the Blue-Screen");
}
```


----------



## kpedersen (Nov 2, 2014)

I'm kind of bringing up this old thread because I have found something useful in Mac OS X that FreeBSD could benefit from (so could most FOSS OSes in fact).

The remote desktop (VNC based) is actually really impressive. Admittedly it is quite a bit slower than most VNC implementations but supports multiple user sessions. When you connect using a VNC client it takes you to a login screen where you can open up a new user session regardless of the other users logged in.

I believe with some hacking of an existing VNC server like x11vnc and the use of Xvfb (or something faster like Xephyr running within Xvfb) it would be possible to not only create unique user sessions but also provide a "Select resolution" option on the login screen.

I am surprised nothing like this exists yet. Since it doesn't take too much advantage of X11 (just need a fake server), it could even work with trendy hipster stuff like Wayland or Mir.


----------



## wblock@ (Nov 2, 2014)

Short of the resolution selection, doesn't net/x11vnc already provide multiple X logins?  I thought I used it for that, although it was like a decade ago.


----------



## jb_fvwm2 (Nov 2, 2014)

As far as the OP, the other day I saw a huge white-blue macro of a single snowflake.  And thought: "If that was the mascot, >> icon , maybe it would attract a lot more past the homepage or past review sites that the present round one."


----------



## kpedersen (Nov 3, 2014)

wblock@ said:


> Short of the resolution selection, doesn't net/x11vnc already provide multiple X logins?  I thought I used it for that, although it was like a decade ago.


Well, yeah, good point, but they require different ports, i.e 5900 (the default VNC port), then 5901, 5902 etc.

What Mac OS X's server does is listening on 5900 for a connection, handling the connection in a separate session whilst still listening for new connections. Thinking about this now, it would really not be too hard to implement and the `x11vnc -create` flag is quite close, unfortunately it currently does not start a new Xvfb server for each connection and instead shares the initial one.

I am actually quite surprised this functionality doesn't exist (especially since FOSS operating systems are so "cloud friendly" nowadays). When I get back from work I am often quite fatigued from computers haha but I might invest some time in hacking this functionality in.

For resolution, since a new X11 server is started each session, the -geometry can be set to the desired size. For resuming existing sessions, I believe Xephyr has xrandr extensions working so it can resize as needed (though I just tried it now, it crashes the VNC viewer but reconnecting seems fine).


----------

