Essence: Desktop operating system built from scratch
nakst.gitlab.io
nakst.gitlab.io
I feel like the features that are unique are mostly in 3 groups:
1. Features that shouldn't be unique to this system. Tabbed windows have occasionally happened on other systems, and probably should become more common, and there's no reason it shouldn't work on other systems. I hope this inspires other people to copy;)
2. Features that only work if you have really tight integration or different primitives than most OSs are using. Programs updating file name when you rename from the file manager, or the file manager showing when files are open... might be possible to graft on to other systems, but it'd be a right pain. Even systems like MacOS are going to struggle - the whole OS is under one company that could do cross-functional stuff like that, but any time it touches applications you need external developers to support it and that may or may not work out.
3. Features that are possible, but nobody else does it because it's impractical - possibly only impractical from their starting points, though. Showing total size of subdirectories is expensive on ex. Linux because you have to walk every file recursively. I don't know if they're just eating the cost because they haven't hit a case where it matters, or if their system actually makes it cheap (I could easily imagine a filesystem that moved the calculation cost up front).
To make GP’s use case better, FS really needs an custom index or require that every write also update all hierarchy. Unless of course they work like indexers and just work with delayed data
I'd never consider an e-mail system (or a filesystem) that doesn't allow me to at least very closely approximate that structure.
I guess path->{metadata,data} with no transactions is a simple abstraction, as with so many other simple abstractions, it just bites you when you try to build anything nontrivial. Then you need to switch to a real solution. Just as people sometimes start with a bunch of shell scripts before they recoil in horror and realize that they should've started with a real programming language.
see WinFS https://en.wikipedia.org/wiki/WinFS
Many of the features of OSX (which I rarely use, but worked tirelessly on) came as a result of Steve's dislike of having to know where files were and having to navigate to them. The Dock, Spotlight, Mission Control, Expose, even Time Machine all came out of Steve's hard-to-pin-down concept of what a modern user interface should be.
I suspect it may be possible to create a fully "Smart Folder" query driven Finder experience. Your sidebar could be populated entirely of saved queries. This might be a fun experiment!
Now sure, it'd be nice to grep through my house, but I still couldn't hang the same painting in two places at the same time.
It's funny how all these anti-directory tag-and-search proponents seem to take for granted that their hobbyhorse is obviously superior. I've never seen any proof that it is, and I don't think it is.
isn't that kind of what we are already doing with the names used in the directory hierarchy + the filename?
Or: Yes, in a way that's what the hierarchical directory structure already does for us.
In either case: So what's the use of ripping out the hierarchical directory structure and replacing it with some (other) "tagging" system???
(We already have a universal "tagging" system that automatically uses every single word in every single file as a searchable "tag"; it's called "grep"...)
To me the real obstacle isn't that it's expensive (I mean, you could ostensibly cache the size on disk for each directory, if not find some other clever algorithmic solution), but that the notion of "size of a directory" itself isn't all that meaningful in the presence of e.g. hardlinks.
If you really wanna avoid double counting, just divide the size of every file by st_nlink. Of course you’d have to update the cached sizes of every directory that has a link to that inode so you’d need to cache the mapping from inodes to paths too. Another solution is to cache 2 sizes per directory, one for all files with 1 link and another for files that have 2 or more. The UI could hide the latter when it’s 0GB. But this discussion is academic; Nobody really cares about hardlinks.
The point is, the problem itself is-ill defined. There's no solution to that other than scrapping or redefining the problem itself. And it's hard to define the problem precisely for a non-technical user.
Note that's already the case when the user removes files that are opened by some process.
This is ambiguous between "how many bytes are all these files in total" and "how many bytes does it take to store a single copy of all these files on such-and-such file system (mostly the current one)". The latter can be different because of transparent compression, which is common on e.g. BTRFS.
They are labelled "Size" and "Size on disk", respectively.
While that may be a reasonable strategy, it's not what every disk space analyzer does.
I've got a backup setup that uses hardlinks to provide a wide variety of restore points without using a lot of space. du doesn't double count:
$ du -hs daily.0
436G daily.0
$ du -hs daily.1
436G daily.1
$ du -hs daily.0 daily.1
436G daily.0
12M daily.1Doesn't inotify provide move events that allow that?
On Windows and Linux this is not difficult, I believe; the functionality is already present in things like https://docs.microsoft.com/en-us/sysinternals/downloads/hand... and lsof.
If your program just read to copy in memory then closes the file, waiting for the next save to reopen it, the OS can’t know on which file you are working. And this, i think, must be a pretty common implementation.
However I don't think that's quite enough, as most apps will close the files again after they have read them. There is no need to keep them open, as you are working on their in-memory representation, not on the file on the disk until you hit 'Save'. So this seems more like a desktop level feature similar to "Recent Files", where the apps has to manually announce what it is doing instead of relying on low level file operations to figure it out.
"total size of subdirectories" is basically impossible as long as there are hardlinks. But hardlinks are useful, so. Even w/o hardlinks, if you have anything like ZFS snapshots and clones then you have multiple kinds of "total size" to show, like "total size" of all the files below vs. total space consumed by those files in this snapshot/clone. You could have hardlinks and all of them and then asynchronously update caches of sizes, but now you waste cycles on that and those cached sizes will often be wrong. You basically can't get there without making trade-offs that kinda suck. It's just better to not bother with this particular feature.
If your only option is polling you're right but we're talking abou an os from first principles here. You have the control to make sure all file changes go through the proper api and update the metadata to be as accurate as you like.
To take an example of size data types from another thread, let's imagine you want to track 2 kinds of size: size as read sequentially (A) and size gained if deleted (B). The first cares about links but the second does not. Every folder would track the size of sub-directories by listening for size calculation events firing on the contained files and folders. A lowest level folder would listen to the events of all its files and update it's own size metadata, this triggers another event that any parent folder is listening to, repeat. A link would just listen to the event of its linked file or folder and would only indicate size updates as relevant to the size data type A. This information gets propagated upwards normal.
As you say, there's a lot of details here but I'm not coming up with any blockers that would invalidate the pattern. It's a very flexible system and I've written this sort of propagating update before with future features all being simple to add. If you can think of any blockers I would be very happy to hear them so I can design around it next time I touch a project like this.
To be clear it's not like an event registration system is better in every way than polling. It's trading some extra hd and (potentially) memory usage for upfront and cheaper cpu costs. It is possible that whoever made the decision weighed the two options and decided on polling instead of events, and this decision was made long ago when os filesystems were first being designed and storage was at much more of a premium.
What I've learned in my experience with ZFS, Lustre, and other filesystems is that the user simply cannot get what you're asking for, not with any kind of real reliability. For distributed filesystems (like Lustre), the kind of thing you're asking for is simply ETOOHARD or ETOOSLOW. It's very easy to insist on a solution, and very hard to get one.
Deleting links does not give you any additional storage space beyond the minimal amount taken up by the link itself.
As for existing filesystems, yeah they're going to have problems as they're built on filesystems that for the most part are polling. I'm not insisting on a solution or saying existing filesystems need to use this though, this is all in the context of a greenfield project. Switching something like linux to use an event based system instead would be a major project.
As for distributed filesystems where every file does not own all its own bits, that's just a different way of measuring and doesn't have any major problems for the concept.
What would be interesting to see how useful it would be, is heterogeneous tab grouping (tabs from different apps)
This was going to be built in to Windows 10 v1903 as "Sets" but it got pulled: https://www.howtogeek.com/352109/how-to-use-sets-in-windows-...
For macOS the reason is simple and deliberate: it's much easier for artists to make beautiful icons as bitmaps. They can use Photoshop and not just vector editors. Given that screen resolutions increase at a somewhat slow and predictable pace it means they can just redraw icons at higher resolutions from time to time to keep up with their hardware changes. They like to change art styles anyway.
[0] See for example: https://www.amazon.com/bestsellers/electronics/1292115011 https://www.amazon.com/bestsellers/electronics/565108/
Counterargument: Fonts are vectors, and with sub-pixel hinting they can look pretty good on low-DPI monitors
> Counterargument: Fonts are vectors, and with sub-pixel hinting they can look pretty good on low-DPI monitors
Ah, but I feel safe in saying, no one puts hints in nor uses hinting in the rendering of anything to do with folders and the like in a GUI.
The fact that autohinting exists doesn't mean that is easy to do.
I suspect that we’ll continue to live in a world where the UI is neither optimal for HiDPI nor (any more) for low DPI, while really high DPI (e.g. over 200 DPI on desktop monitors), which would enable going full vector without detriment, will rather remain the exception than becoming the rule.
It flawlessly render vector graphics (SVG) with sub pixels resolution
MacOS has actually had this one in the bag for a couple of decades now (likely due to their really tight integration).
No, the OS can provide frameworks that handle it by default, so app devs don’t have to worry. macOS does this.
The user manages windows and not apps.
Currently, this is being leveraged in tabbed apps, and in the ability to open a window, resize it, etc and then decide which app should show itself in that tab of that window.
But the paradigm change itself could potentially lead to new workflows, etc if creative app developers and designers really start working woth it.
I thought Mac OS apps could and did do just that. Perhaps it's an inconsistent behaviour that depends on the developer implementing it rather than something that comes for free by using Swift UI or Cocoa.
Wow. Just wow. I wish everything in my life was designed like this.
Very impressive, amazing amount of work went into it clearly.
Stunning attention to detail - font choice on install, dynamic file renaming, open file highlighting, tabbed windows with apps inside. These felt so intuitive to me as I watched. Vector based UI - excellent choice!
Watching the demo brought back memories of OS/2 and BeOS in terms of aesthetics and usability. The theme designer blew me away - it looked like Sketch or Adobe XD in terms of UI prototyping. If this offers a way to draw your UI with vector based tools and have it "attached" to the OS's API then that's really exciting.
Further, if this could be extended to a VB style application where one can code in actions, events etc in a user accessible way [1] then I think it would be a killer app for this OS where a user/developer could shape the entire OS to fit the needs of the design.
I'm thinking here of a single use OS on a USB stick - for example, a writer's OS where the whole OS/Apps just provide a rich environment for wordsmiths to work in creative isolation. Like the "Zen" mode of many editors, but taken to the next level. Glorious looking dictionaries, pinboards for notes and research etc etc. Design the UI, apps and utilities and compile it all into a single, bootable OS would be wonderful. That would be very satisfying to me the way my mind is wired.
[1] To be clear, a language which is approachable by beginners, e.g. BASIC like or some high level scripting language. Also pluggable languages would be very cool for advanced workers.
I do not like GNOME 3 at all myself. A lot of the features that the developers are proud of – things like CSD, no menu bars, that big empty wasted panel with no indicator icons, the clear empty desktop with no desktop icons and so on – are the specific things I do not like.
I still use Unity on Ubuntu. One of my machines has the latest version of the Unity remix on it: https://ubuntuunity.org/
... but little regressions are accumulating. I can't empty the wastebasket from the dock any more; the volume control works but mousewheel control is now reversed (down is up, and up is down, although I have "natural scrolling" turned off); Firefox doesn't support the global menu bar any more; and so on.
It seems to me that a lot of modern desktops are removing features, or changing features (like the disappearance of menu bars), because people today don't know how to use them. Since they don't know how, they don't use them, so they feel that these features are not important, so they remove them.
Similarly, Windows 11 has now lost support for vertical taskbars. KDE has it but it's broken, as it was in GNOME 2 and now is in MATE. Cinnamon has a crude form, but it can't arrange status icons in rows, only in columns, which wastes a huge amount of space... but I suspect they've never seen a vertical taskbar, so they don't know how it should work.
I know there are Vector based icons and graphics set in other OS or Desktop Environment, but is this the first time the whole UI being Vector based? Lots of interesting thoughts and experiment in modern day Vector UI capabilities.
However once GUIs started relying on using bitmaps for drawing parts of the theme things got a bit less vector-y. But that happened later.
[0] https://docs.microsoft.com/en-us/openspecs/windows_protocols...
For buses and basic IO it might be a solution. For a broader picture, it may be not.
For example: your favorite USB device that requires a custom driver won't work (like a USB-to-Serial FTDI chip). Starting from there, now imagine giving support for every printer in existence.
On the topic of drivers and specifications, I strongly recommend a talk entitled "It's time for the OS to rediscover hardware" [0]. If you prefer a written form, "OK Lenovo, we need to talk" is a great article on the same topics. [1]
[0] https://www.usenix.org/conference/osdi21/presentation/fri-ke...
[1] https://www.haiku-os.org/blog/mmu_man/2021-10-04_ok_lenovo_w...
I have no experience in operating systems, so may be proposing a naive solution.
Anyone here with more experience that could share some ideas?
As Linux's driver model is incompatible with Windows XP's driver model, Jan Kratochvil has to code a Linux driver implementing a Corba interface [1] to dialog with a remote piece of code implementing the other end of Corba.
This remote code itself was in two parts, one was a driver sub-system borrowed from Reactos 2.3 (its kernel was similar to Windows 3.51 kernel at the time) that piloted a binary Microsoft native NTFS driver.
[0] https://www.jankratochvil.net/project/captive/doc/Details.pm
[1] https://en.wikipedia.org/wiki/Common_Object_Request_Broker_A...
A driver has to filter the messages it receives, process the one that were addressed to itself and pass on the other messages to the next driver.
By the time you have attracted enough users that those few percent of performance you are losing on the paravirtual drivers is an issue, the extra code for some performance critical native drivers will be a small part of your OS.
For example, I bought a used Sony Xperia X that was several years out of date when Sailfish OS was released. I also bought a half-decade old Think Pad because it was one of the few machines that LibreBoot supports. I actually care way more about software than about having the latest hardware or the broadest array of hardware options to choose from.
All this said, it makes me very happy that some people are brave enough to keep trying.
But in all seriousness I would use a Chrome OS made by Mozilla with a daring new interface (tabs everywhere!), unixy with a brand new text shell, etc.
Now that Intel has finally been forced to change its mindset. I hope they will see the need to Open Source their IP and Drivers as competitive advantage. I am not even an avid Open Source supporter, but if they need or want to balance the power between Operating System competition. That is what will be needed.
This will require a complete pivot to Fabless and IP model.
It is sort of strange to see how thing plays out, I could see the possibility of Intel and Microsoft releasing x86 ISA and Windows kernel as open source in the future.
I had a similar idea as a kid, I was pissed at all the bloat consuming my cpu and ram on windows so I wanted to build my own os that would run a single app taking advantage of 100% of the hardware. I learned some assembly and managed to create a bootable floppy disk, then quickly gave up, realizing how much work a functioning os would take...
One guy pulled it off. https://en.wikipedia.org/wiki/TempleOS
https://news.ycombinator.com/item?id=29270776
Video demo:
In terms of general minimal-viable support, that's probably hit-and-miss (perhaps around where Linux distros were at in the early 90s - probably worked, except for everywhere it didn't), particularly with the increasing ossification and variability of BIOS/legacy emulation in current-era systems.
Here's the latest archive of it I could find: https://web.archive.org/web/20171014135312/http://www.skyos....
Also it's wiki page: https://en.wikipedia.org/wiki/SkyOS
Here is the LinkedIn page of the main developer (Robert Szeleney) of SkyOS: https://www.linkedin.com/in/robert-szeleney-26902738/
In 2009, he founded Djinnworks: https://djinnworks.at/
You can find Robert Szeleney's email address on https://djinnworks.at/team
Considering the fact that according to the German wikipedia page (https://de.wikipedia.org/w/index.php?title=SkyOS&oldid=21527...), the last version of SkyOS is from 2008, I don't believe that SkyOS was killed because of a lack of driver support, but rather because the main developer simply had to make money. But feel free to ask him directly, you now know how you can.
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
I knew x86 well from demo scene coding, and I had the Linux and NetBSD sources to help, but the hardest bit was just getting all the boot sector stuff going properly and getting the processor into 386 mode as soon as possible.
I wrote an entire OS that booted into a windowed GUI, multi-threaded, file system support etc, etc and my goal was the whole thing booting happily to the desktop in 4Mb of RAM from a 1.44Mb 3.5" floppy, which it did. Every line was written from scratch in x86 assembler, because I was a masochist like that.
I called it Tinkerbell, for reasons lost to time, and it was hosted at tinkerbell.org back when I owned that domain. I just checked archive.org but sadly they didn't grab it when it was around.
EDIT: 32-bit OS book and the source are here:
Do you have insight into why modern operating systems consume gigabytes of disk space and require so many system resources?
Also, Essence is basically a Win32-like system (with some very small use of C++ but e.g. using char* instead of std::string). The kernel is handling graphics and the windowing system, like it used to do in Windows. Even the eyedropper you saw has kernel mode support.
https://gitlab.com/nakst/essence/-/blob/master/kernel/window...
Yes you can get very efficient code this way but only at a cost of low programmer productivity / reliability / security, especially as the code scales up to more than one developer. For a hobby OS it doesn't matter. For a commercial OS it's not good enough, hence Apple/Microsoft's investment in .NET and Swift. These consume more resources but make it easier for programmers to avoid mistakes and work together.
Don't get me wrong. I'm loving the style, the panache, the clean code, the ambition. Fantastic project. But it's a bit naive to ask "why can't all operating systems be like that?". Operating systems written by one guy will inevitably be fast and light compared to an OS that's 30 years old and which has 10,000x the number of features (at a conservative guess).
Where operating systems are headed is more towards security (process isolation, bulletproof input etc), not lightweight GUIs on top of thin kernels like this.
Are there any passion (or other) projects that explore this? I know about Qubes, but that's more like a heavy layer on top of a heavy duty GUI, on top of a Linux kernel.
Bheem OS, "a next generation secure operating system." Inspired some by Spectrum. So new they can't keep their blog online. Here's a snapshot of a recent blog post about the security features https://blog.openw3b.org/crosvm-for-os-and-app-virtualizatio...
I would wager that 99% of xen related development is intended, as it should be, for dom0 server environments that will never have a keyboard, mouse or 3D capable video card plugged into the bare metal.
I use nvidia every day with qubes, but just for display output. I sometimes see memory leaks where it will draw screen buffers from booting alternate OSes on another drive.
As is everything written in nix!
https://github.com/Qbix/Platform
Labor of love for a decade
Kind of like MacPaint is an App but MacOS is an OS
Qubes is the best and most currently complete thing i've seen (In the last couple years its also made progress supporting GPU domain). Its not perfect and has some controversial opinions like default passwordless sudo in VMs, but it is still far ahead of most distro's security.
For me Qubes 4.1 performs well though I have it on an m.2 and have plenty of ram. It boots quickly, with the only seriously slow thing being VM startup. I'm able to do all my dev work and use Windows for work related things on it as well as have disposable browsers for banking and sketchy sites.
Knowing nothing more than what you've just told me: That doesn't sound like a bad thing, IMO; if you're using that kind of system, you probably care a lot about security, and I'm not sure I'd trust a shared-kernel system against malicious code. (I appreciate that other people may make that trade-off very differently)
And yeah, it’s not going to have real world adoption soon. Neither did linux.
Every non-commercial OS starts out as a labour of love.
Good luck to them :)
Tell that to Andrew Tanenbaum
Written in Rust.
If it was ported to ARM and had a decent GUI interface builder, it could become a killer OS for making interface panels for appliances. Some manufacturers are repurposing Android for this task, however this forces them to use much powerful hardware, and their UX is still laggy.
On first glance, Essence looks like it makes efficient use of hardware resources and, as you say, an ARM port makes sense. I can visualise an OS version of web packer type tools where you rollup your app/gui and just enough OS to run them on the target. I can say that people who I've worked for would pay good money for that sort of kit. Not suggesting closed source, but in terms of the usual caveat to management - paid support, open source longevity etc.
Actually Qubes has relatively small CPU overhead due to its utilization of hardware VT-d virtualization. RAM usage is huge though. Source: using it as my daily driver.
I wonder if I can have a Qubes VM with Essence working.
Great job!
Was more impressed with the USB unplug/replug thing and the "live update" on renaming files. Pretty cool.
In Plan 9, every process draws interacting with a screen file (in fact, it is a whole filesystem, also including keyboard, mouse, control files, ...). What rio, the Plan 9 window manager, does is to "multiplex" this screen file (again, file system) so that each process has its own screen which does not correspond to the physical monitor, but to a window.
An uncommon feature that derives from this design is that you can run a new rio instance inside a rio window. More important, you can just connect to other machines and interact with their windowing filesystems, getting network transparency "for free".
there is definitely a place for operating systems like this one in the future. the author is creating something many of us want: a system where the user is in control of their computer! fancy that! imagine not having to go retro but having total control of a modern machine.
i hope the author pulls this off.
The Essence operating system at Handmade Seattle 2021 [video] - https://news.ycombinator.com/item?id=29386605 - Nov 2021 (39 comments)
Essence – An Operating System - https://news.ycombinator.com/item?id=28123530 - Aug 2021 (42 comments)
I like that they implemented composing tabs between different applications. This is the way I try to organize work/projecta/projectb/personal use, but it never works with current osses.
Spaces in macOS is actually kind of useless, because certain applications have windows across screens (finder, chrome).
Tabbed Finder windows are the most useless thing ever.. It's Apple listening to HN haha.
Anyway, screenshot on twitter: https://twitter.com/_nakst/status/1477247856805351425/photo/... and gitlab https://gitlab.com/nakst/essence
Hard disagree. I use them all the time.
I tend to use finder tabs very differently than the browser tabs where I can have many different websites, but later I tend to forget why I have those there.
I'm glad that MacOS can restore everything pretty well after a logout/login. A major focus of OS should be on managing these "work state" through new UI paradigms/tools. edit: typos
I'm glad I'm not the only one. I had to switch off of Nautilus because it kept trying to make me open things in new tabs instead of new windows. The thing is that I don't use the file manager much and 9/10 times I want to open directories is because I want to move files between them or less often visually compare which doesn't work well with tabs.
To start with, I wish all of these would learn the lessons from E.g. AmigaOS of separating the "serious file manager" (which would tend to be e.g. Directory Opus or Disk Master II) from the launcher / desktop (e.g. Workbench). Though Directory Opus could be used as a Workbench replacement.
Secondly, I wish they'd all learn from the "middle ground" Workbench offered as a spatial-ish launcher: Workbench does not force only one open window for a given directory, so it's not fully spatial. It also does not remember the locations of everything unless you make it. But it does let you lay out directories spatially on the desktop and "snapshot" their locations and the locations of the files within them. And that makes it far superior as a launcher because you can organise your most used directories etc. for easy access. I get why people hated on a fully spatial launcher, but the tradeoffs of Workbench gave it the main benefits people who like spatial launchers/file managers tend to be looking for without the downsides people who hate them tend to hate the most - e.g. you can use Workbench without ever being affected by it's ability to snapshot icon positions or window positions if you prefer.
These don't make it a good file manager, but for that a multi-pane design is far better anyway and trying to shoehorn the full flexibility of a good file manager into a launcher is a folly. Dual pane + a command palette is a start, but e.g. DiskMaster II is the one I like best, because it lets your fully configure the layout with arbitrary file listing windows + arbitrary command palettes. For a file manager with that flexibility also having the option to open in tabs would be great, as long as it can be turned off.
The result of insisting on trying to combine the two seems to usually be something which is bad at both (though nothing really prevent you from making something that reuses most of the functionality to let you configure it to work like both a good launcher and a good file manager, it seems temptation then quickly turns to trying to merge the two modes)
edit: This is the maintained fork of a fork of https://ignorantguru.github.io/spacefm/
edit because forgotten: which in turn is a fork of an early version of https://wiki.lxde.org/en/PCManFM and several 'mods' thereof.
Anyways. For me it's really usable, even without too much fiddling. Stays out of the way. Doesn't need much RAM and can handle anything I throw at it, which may not be 'Data-Hoarder' territory exactly, but I do have large Tsundoku-stacks which require work to shrink them, and the usual assortment of movies and music, pictures, sources, and so on.
This workflow works very well for me on Win10. I can easily separate work/hobby stuff by using different desktops.
The thing is, when I see a mention of "low-powered hardware", I'm instantly thinking of a Raspberry Pi 4. I assume this isn't supported (yet).
Take a look at https://github.com/torvalds/linux/tree/master/arch/arm64
For an OS it is different, you need to reimplement many parts: bootloader, drivers, task scheduler, virtual memory...
x86 and ARM don't same the same memory consistency model, so while managed languages do somehow protect their users from the differences, languages like C++ do expose it by default (unless you make use of the C++11 memory model APIs[0]).
So it depends how clever the lock-free kernel datastructure were written and other memory access assumptions.
[0] - https://en.cppreference.com/w/cpp/language/memory_model
QNX, V2OS [1] (written in x86 assembly), SkyOS to name a few. I mention QNX because I remember running it from a floppy in end of 90s. Unix system with GUI, from one 1"44 floppy.
In the 00s, the website OSnews often covered all kind of alternative OSes (how I came across SkyOS).
Which recent ones are you aware of?
Nowadays it is chosen OS used by NVidia for their autonomous vehicles (Linux is for development mostly).
The app in a tab approach seems really neat.
I guess if big tech decides to stop developing new useful features, we will have to start doing it on our own.
Sure it's cool, but the problem will always be the lack of open hardware. Personally I will always be more curious about smartphone OS made from scratch.
The only think I want right now, is to use old smartphones with a lightweight OS.
Developers should therefore focus on more hardware support instead of adding unnecessary features.
So it is nice that it makes use of C++ and there are some frameworks already like the GUI stack, however this is missing from the website.
From https://gitlab.com/nakst/essence/-/blob/master/help/Contribu...
Certain people have been doing this sort of thing forever. It was never a good idea. Whenever you probe why they thought it was a good idea, all the reasons (where they are expressible at all) turn out to depend on falsehoods. Most usually, though, it amounts to laziness about learning anything new.
You can see effective use of Modern C++ in SerenityOS, to excellent effect.
this is from bgfx
So it is basically Modern C++, just a few years later.
Now, all things considered, having used bgfx in various languages, I think the Orthodox C++ approach leads to quite clean code.
This.
Not sure on the web browser though
Even has an irc client ;) everything you need
There’s almost no commercial insentive to create a browser/rendering engine (Opera couldn’t make it work), and it almost to much work for an open source project to take on. As sad as it might be, Google won and Chromium will be the final browser, everything else is just customization. At least Microsoft had the courtesy of slowing down progress with Internet Explorer, allowing others to more easily catch up.
Of course the difference between building an OS and a browser is that for an OS, you just have to build something that is usable, how you get there and what that looks like is up to you, and you can really get creative with it and break norms.
For a browser engine, by definition, you have to build something that behaves basically exactly the same as any other modern browser. So you're implementing a gargantuan spec to a very high level of precision (since you have no control over how it's used), and the end result is a technical feat that's only impressive in the fact that it was done, not in that you get to use it now, and it does anything a reskinned chrome wouldn't do.
This is an excellent observation, and gives me an excuse to recommend Alan Kay's seminal OOPSLA 1997 keynote "The computer revolution hasnt happened yet" -- the link to the whole thing is below, but I've set the time at the start of what I think is the immediately relevant point (he takes a minute or so to explain)
There are hundreds of standards spanning thens of thousands of pages. Some of them are obsolete, some of them are not, most of them interact with each other in complex and non-obvious ways.
An attempt to measure the scope is here: https://drewdevault.com/2020/03/18/Reckless-limitless-scope....
And that's before we get to things like Javascript or WASM.
Another measure is the count of WebAPIs. A modern browser ships six to seven thousand APIs: https://web-confluence.appspot.com/#!/confluence All these APIs are available via Javascript
The methodology used there is horrendously bad. Drew's smart, so it's hard to conclude that this isn't intentional just so he can pump up the numbers and tell cute stories like the one about Wikipedia's list of longest novels. (Not to mention, an overabundance of specification of correct behavior isn't what makes implementation hard, it's trying to match the undefined behavior that everyone else follows without having a spec that makes things hard.) Any serious attempt to measure the scope of what browsers actually implement is pretty straightforward, so there's no real excuse: you start with the the HTML5 spec and then go from there.
I'm amazed how many single person or small team developed operating systems are out there. Another one I like is RedoxOS (written in Rust) and Resea (microkernel written in C). Also, there's KolibriOS (written entirely in Assembler).
...BGA?
I couldn't even begin to imagine the work that goes into just what's there already.
> Meanwhile operating systems will continue to be written primarily in C/C++ for the forseeable future
And we will continue reading about lifes ruined by bugs and people killed by exploits. There is no sustainable future with unsafe foundation.
Really? people die because of c++? it’s pretty hard to take the rust crew seriously if this is the point of view.
Also I don't like Rust.
Yes, you are right. We need to invest lot more resources into that. And we need languages better than Rust.
> It's actually less work to audit C++ code manually to find memory unsafety
Nope, you are fundamentally wrong. And every new zeroday shows that you are wrong.
that by no mean is a bad thing, it just means doing things for themselves, to express, to learn etc, typical of creative work.
People do that all the time. However in OSS there is this thing when people feel they need to present their work as useful to others eventhough clearly what drives their work has nothing to do with other peoples' needs, it's just their itch.
Remember that one of the original motivators behind "Open Source" is scratching your own itch.
that's what I said, and you repeated it, as if it's some new insight or supports some argument.
Is there not an issue in OSS where thing that should not be used in commercial context, are used in commercial context, they break, then people blame the adopters for expecting too much from OSS? Rarely the other side of the coin is addressed which is creators (not all of them) went out of their way to promote adoption of these things.
Here is an analogy: art design chair sold as office work chair. Of course if you are smart you would not buy them because over time the ergonomic would kill you. But that doesn't mean no one would. When some gullible people buys these chair, you say: idiots. However, I bet you also think about the people who made these chairs paid for TV commercials that never show the ergonomics of the thing, and question their responsibility.
Now replace "art" with "hobbyist software"
Because a lot of the things they're doing are vanishingly unlikely to work on an existing system. (I discussed my breakdown of whether features could be portable more above: https://news.ycombinator.com/item?id=29952283)
"Essence will happily run on low-powered hardware. It can take less than 30MB of drive space, and boot with even less RAM"
which is pretty cool. ESP32s already have 8MB of RAM and access to SD cards. With 16MB could it run this? That would be amazing.
It's in a very interesting little spot between no OS (ala Arduino / Espruino), and an OS like Armbian, which is just huge really -- too big to fit in a microcontroller properly.