News for hackers. Stuff that matters.
Re:Redox – A Unix-Like Operating System Written in Rust by k__ on Tuesday November 13, 2018 @12:45PM (#18442947)
Like?
Re:Redox – A Unix-Like Operating System Written in Rust by protomyth on Tuesday November 13, 2018 @01:53PM (#18443644)
My guess is someone will try to have an OS based on containers of Web Assembly apps. There are quite a few APIs that have been built over the years that are familiar to programmers. I do believe this will cut down on the pain of having to new develop system level tools to manage such a beast.
Re:Redox – A Unix-Like Operating System Written in Rust by bluejekyll on Tuesday November 13, 2018 @02:26PM (#18444013)
https://github.com/nebulet/nebulet

"Nebulet is a microkernel that executes WebAssembly modules in ring 0 and a single address space to increase performance. This allows for low context-switch overhead, syscalls just being function calls, and exotic optimizations that simply would not be possible on conventional operating systems. The WebAssembly is verified, and due to a trick used to optimize out bounds-checking, unable to even represent the act of writing or reading outside its assigned linear memory."

Re:Redox – A Unix-Like Operating System Written in Rust by zaarn on Wednesday November 14, 2018 @04:25AM (#18448597)
WebAssembly has a few more advantages when deployed as part of the kernel; you can run things in ring 0. Even better, you can transparently remap things in memory. And even better than, you can realize IPC as a simple function pointer. Safely.

Of course, you can't have everything as WebAssembly, some core drivers will need to run some critical machine code, but those could be tightly enough integrated that the overhead is almost zero (ie, by using WA imports you can turn this into a function call overhead)

Re:Redox – A Unix-Like Operating System Written in Rust by adamnemecek on Tuesday November 13, 2018 @12:58PM (#18443090)
* entirely async api

* more light weight memory manager (possible thanks to borrow checker)

* GPU first OS

* a better shell. I know I can run whatever shell I want on unix but a better shell being native would go far.

Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @01:07PM (#18443161)
I agree with the first two points, not sure how Rust and GPUs are really related yet. I mean I know you can bind into GL/etc libs, but there's something more profound about Rust's type system, and the parallelism / memory model of a GPU (or CPU/heterogeneous computation in general). AFAIK, there's no way to write GPU shader code that shares the static analysis from the Rust CPU code. It would be very interesting to be able to talk about the move semantics across the full modern computing architecture.

If anyone knows work being done in this area I'd be curious to read more personally.

As for a better shell, I also completely agree, but I'm not sure it needs to break POSIX. Shameless little plug, I recently started a shell in Rust myself: https://github.com/nixpulvis/oursh

Re:Redox – A Unix-Like Operating System Written in Rust by eridius on Tuesday November 13, 2018 @01:30PM (#18443391)
As a fish user myself, I would love to see a new shell that retains many of the UI features of fish (like the excellent autocompletion behavior while typing) but with an actual usable modern fast scripting language.

POSIX compatibility at the scripting layer is beneficial for being able to run existing shell scripts, but the sh scripting language sucks in many ways.

What I'd really like to have is a shell that supports both a POSIX compatibility mode for running existing scripts, alongside a more powerful and modern scripting language for use in writing scripts targeting the new shell directly. I'm not sure how to identify which mode an arbitrary script should run in though, or which mode should be used at the command line.

Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @01:32PM (#18443422)
I've started allowing just that `{#! }` also as a means to write other languages inside the shell syntax.

Take a look at: https://nixpulvis.com/oursh/oursh/program/index.html

Re:Redox – A Unix-Like Operating System Written in Rust by eridius on Tuesday November 13, 2018 @02:15PM (#18443897)
Oh great! I hope you take good care in designing the "modern" language, because once people start writing scripts for your shell, it becomes very hard to fix mistakes (this has been a problem for fish's scripting). I wish I had the time to be involved in designing a new shell scripting language, as it's something I'd really like to see done right, I just have no time to spend on that.

Incidentally, the link to the `modern` module is broken, it's just program::modern (which is of course not a valid link). Given that I don't see a `modern` module in the TOC I'm assuming the module doesn't actually exist yet?

Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @02:22PM (#18443978)
I still living in the 70s for now... Maybe one day I can be a modern man living in a modern world.

Until then I struggle with background jobs, because they are a fucking pain in the ass.

Re:Redox – A Unix-Like Operating System Written in Rust by eridius on Tuesday November 13, 2018 @02:37PM (#18444116)
Oh man, a lot of the ideas I've thought about for improving handling of shell scripts have problems in the presence of background jobs, and in particular the ability to background a job that's currently foregrounded.

On a related note, here's something I've been thinking about:

I want to be able to insert shell script functions in the middle of a pipeline without blocking anything. Or more importantly, have two shell functions as two different components of the pipeline. I believe fish handles this by blocking everything on the first function, collecting its complete output, then continuing the pipeline, but that's awful. Solving this means allowing shell functions to run concurrently with each other. But given that global variables are a thing (and global function definitions), we need a way to keep the shell functions from interfering with each other. POSIX shells solve this by literally forking the shell, but that causes other problems, such as the really annoying Bash one where something like

  someCommand | while read line; do …; done
can't modify any variables in the while loop because that's running in a subshell.

So my thought was concurrently-executed shell functions can run on a copy of the global variables (and a copy of the global functions list). And when they finish, we can then merge any changes they make back. I'm not sure how to deal with conflicts yet, but we could come up with some reasonable definition (as this all happens in-process, we could literally attach a timestamp to each modification and say last-change-wins, though this does mean a background process could have some changes merged and some discarded, so I'm not sure if this is really the best approach; we could also use the timestamp the job was created, or finished, or we could also give priority to changes made by functions later in a pipeline so in e.g. `func1 | func2` any changes made by func2 win over changes made by func1).

When I first started typing this out I thought that this scheme didn't work if the user started a script in the foreground and then backgrounded it, but now that I've written it out, it actually could work. If every script job runs with its own copy of the global environment, and merges the environment back when done, then running in the foreground and running in the background operates exactly the same, and this also neatly solves the question of what happens if a background job finishes while a foreground job is running; previously I was thinking that we'd defer merging the background job's state mutations until the foreground job finishes, but if the foreground job uses the same setup of operating on a copy of the global state, then we can just merge whenever. The one specialization for foreground jobs we might want to make is explicitly defining that foreground jobs always win conflicts.

Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @03:26PM (#18444567)
This is along the lines of things I was thinking myself. I'm currently aiming to get the POSIX programs working 100%, which I don't believe could allow this. But, the framework for running managing foreground and background jobs should support both the POSIX and Modern syntax and something like this. This is EXACTLY the kind of thing I want to add to the new "modern" language!

Also, the ability to "rerun" previous commands from a buffer without actually re-executing anything would be a cool somewhat related feature.

If you want to chat about shells anytime shoot me an email or something: [email protected]

Re:Redox – A Unix-Like Operating System Written in Rust by pjmlp on Tuesday November 13, 2018 @03:15PM (#18444479)
Entirely async api and GPU first OS were fulfilled by Windows Phone, sadly did not work out well.
Re:Redox – A Unix-Like Operating System Written in Rust by GordonS on Tuesday November 13, 2018 @01:07PM (#18443165)
A bit terse, since I'm on mobile:

> * entirely async api

Surely async only makes sense for IO?

> * GPU first OS

What does this actually mean? The GPU can't be used for everything

> * a better shell. I know I can run whatever shell I want on unix but a better shell being native would go far.

What do you mean by 'native'? Do you just mean 'ships with the OS'?

Re:Redox – A Unix-Like Operating System Written in Rust by sam0x17 on Tuesday November 13, 2018 @12:50PM (#18442999)
As in something different from unix I take it
Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @12:54PM (#18443034)
I feel like a new fresh look at what UNIX is today could be valuable. I wouldn't want to give up a lot of the philosophy around it. Redox does in fact do this in a number of places, for example I think the expansion on "everything is a file" [1] is a pretty awesome idea.

[1]: https://doc.redox-os.org/book/design/url_scheme_resource/eve...

Re:Redox – A Unix-Like Operating System Written in Rust by sam0x17 on Tuesday November 13, 2018 @02:00PM (#18443732)
I'd love to see a "there are no paths, file system is a db" like it was originally rumored Vista was going to be. I'd also love to see more opinionated OS integration e.g. per-application volume sliders, better file system search indexing, real-time built-in file and directory watching API that can be blocking or non-blocking, standardized storage of program files instead of installed app locations being ambiguous, standardized system and app settings via a neat API, etc., etc., an easy and sane git-based package manager, etc
Re:Redox – A Unix-Like Operating System Written in Rust by GordonS on Tuesday November 13, 2018 @02:14PM (#18443891)
Windows 10 does per-application volume control.

Chrome OS has a fixed app install location, as does Windows 10 in 'S' mode (since you can only install store apps).

I remember being intrigued by the database-as-filesystem idea when it was first touted - has any OS actually implemented this? I'd be interested to see how it works in practice.

Re:Redox – A Unix-Like Operating System Written in Rust by TickleSteve on Tuesday November 13, 2018 @02:42PM (#18444177)
"pick"

https://en.wikipedia.org/wiki/Pick_operating_system

Everything old is new again... this was from the mid-60s and was relatively popular for its time.

Re:Redox – A Unix-Like Operating System Written in Rust by gvx on Tuesday November 13, 2018 @03:32PM (#18444625)
Very interesting. The one thing that stood out to me was this, though:

> It is named after one of its developers, Dick Pick.

What an unfortunate name.

Re:Redox – A Unix-Like Operating System Written in Rust by gregw2 on Tuesday November 13, 2018 @09:42PM (#18447015)
OS/400 did this, very cool tech that was never "cool"
Re:Redox – A Unix-Like Operating System Written in Rust by pjmlp on Wednesday November 14, 2018 @03:45AM (#18448469)
Given the way Android and UWP apps work, I always have a warm fuzzy feeeling of carrying a subset of OS/400 design ideas with me.
Re:Redox – A Unix-Like Operating System Written in Rust by adamnemecek on Tuesday November 13, 2018 @02:35PM (#18444102)
These are all very good ideas I’ve also thought about.

WinFS was ahead of its time. Also re file watching, I think I want a reactive api for a lot ornate operations.

Re:Redox – A Unix-Like Operating System Written in Rust by dralley on Tuesday November 13, 2018 @01:08PM (#18443180)
That only makes things more confusing because Redox is explicitly not a traditional Unix. It's more like Plan9, except it goes even further than Plan9 in few places, and things like the Ion shell in Redox don't attempt to be Posix compatible.
Re:Redox – A Unix-Like Operating System Written in Rust by pjmlp on Wednesday November 14, 2018 @03:46AM (#18448473)
What about comparing Redox with Inferno instead?

The actual end of the line for UNIX improvements done by the original designers.

I never get the mistic around the middle stop instead of the end of the line.

Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @12:51PM (#18443007)
If an operating system was built to run lambdas instead of processes, what would that look like?
Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @12:59PM (#18443096)
What is a lambda to you in this case? That lambda will need to be scheduled, it will need to maintain it's scope... All the same general issues could exist. There have been plenty of machines that simply run functions, in fact before there was things we call OSes today, the machines that ran the code would typically not have an notion of time sharing, and would map even more closely to a pure lambda evaluator.

Without specifics about what differences you mean, lambda = function = process = thread = fiber = service = worker = ...

Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @01:18PM (#18443281)
What is a lambda to you in this case?

Pure functions.

That lambda will need to be scheduled, it will need to maintain it's scope... All the same general issues could exist.

But no users would have to be able to start processes. Instead, lambdas could be associated with persistent storage of state, and processes would be started by the OS to apply the lambdas in a simulation loop, but users wouldn't directly start processes.

Perhaps thinking of those as processes isn't quite right either.

Re:Redox – A Unix-Like Operating System Written in Rust by chc4 on Tuesday November 13, 2018 @02:06PM (#18443799)
Have you looked at Urbit? It uses this idea - programs are state machines that you give to the runtime, which pumps them with events (IO, RPC calls, etc) that return [new-state events-out]. All programs are purely functional and deterministic, so you can replay events or serialize the app to transfer somewhere else.
Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @07:20PM (#18446178)
All programs are purely functional and deterministic, so you can replay events or serialize the app to transfer somewhere else.

Interesting. Actually, I have one of my processes serializing its state and exporting it to a different process, while all of the clients continue playing the MMOsteroids game they're logged into.

Re:Redox – A Unix-Like Operating System Written in Rust by nixpulvis on Tuesday November 13, 2018 @01:21PM (#18443310)
The only truly pure functions exist in the imaginary world of mathematics, if you even believe that.

But I think I kinda get your point, but would challenge you to think about this issue with the frame of mind of access control and permissions a bit. I think you'll find the need for some kind of process like task. Maybe not...

Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @01:44PM (#18443562)
The only truly pure functions exist in the imaginary world of mathematics, if you even believe that.

Note I already mentioned persistent stores of state.

I think you'll find the need for some kind of process like task. Maybe not...

Maybe re-read. I've already said that there would be a process like task. Lambdas will need to be associated with state. Users won't have to start processes. Instead, processes will be more like processors.

Re:Redox – A Unix-Like Operating System Written in Rust by macintux on Tuesday November 13, 2018 @02:01PM (#18443743)
This sounds like the Erlang VM.
Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @07:28PM (#18446236)
I'll take that as positive feedback.
Re:Redox – A Unix-Like Operating System Written in Rust by nickpsecurity on Tuesday November 13, 2018 @05:05PM (#18445357)
I'd look at Haskell-based stuff first. I was told, though, by Haskellers that things like House operating system are imperative in style even if done in Haskell. So, a quick search for functional programs for OS's gave these possibilities:

https://news.ycombinator.com/item?id=7166755

You were actually in that thread. Did the commenter's work not actually use FP or you not see it?

Re:Redox – A Unix-Like Operating System Written in Rust by stcredzero on Tuesday November 13, 2018 @07:28PM (#18446232)
You were actually in that thread.

That's kinda trippy. It's like I was a different person. Also, I was working on the predecessor system to the one I'm currently working on. Back then, the thing was written in Clojure. I later ported it to Go. The design philosophy has changed a heck of a lot as well. Back then, I was going to have everything on the same very large and fast virtual instance, with modest goals for the largest population/scale. Now my system is scalable by adding more "workers," which I've spread out onto small AWS instances.

Re:Redox – A Unix-Like Operating System Written in Rust by abecedarius on Tuesday November 13, 2018 @05:44PM (#18445622)
"A security kernel based on the lambda calculus" http://mumble.net/~jar/pubs/secureos/

http://cap-lore.com/CapTheory/upenn/

Re:Redox – A Unix-Like Operating System Written in Rust by ASipos on Tuesday November 13, 2018 @12:57PM (#18443071)
If K-A-T doesn't spell 'cat', what does it spell?
Re:Redox – A Unix-Like Operating System Written in Rust by Crespyl on Tuesday November 13, 2018 @03:05PM (#18444392)
'kat'
Re:Redox – A Unix-Like Operating System Written in Rust by someguydave on Tuesday November 13, 2018 @05:18PM (#18445456)
It would look like a LISP machine from Symbolics...