Live data from Hacker News

Show HN: GodotOS – Fake operating system interface made in the Godot engine

github.com

271–280 of 292 posts

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#271
post #51

This is actually a great proof of concept for using Godot as a cross-platform framework for desktop applications. The distribution package is incredibly simple -- just a single executable and a data file -- and performance is excellent. This seems much superior to Flatpak and the like as a way to offer fully self-contained distro-agnostic binary packages, and vastly superior to Electron in the performance department.…

The Godot editor is a good example of a cross platform framework for desktop applications

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#272
post #51

This is actually a great proof of concept for using Godot as a cross-platform framework for desktop applications. The distribution package is incredibly simple -- just a single executable and a data file -- and performance is excellent. This seems much superior to Flatpak and the like as a way to offer fully self-contained distro-agnostic binary packages, and vastly superior to Electron in the performance department.…

I don't get why people in this thread are conflating Flatpak with different ways to do desktop UI. Even if your app is a single self-contained binary, it can benefit from Flatpak. Sandboxing, permissions management, separation from system (needed on 'immutable' and image-based distributions), unified package format (don't need to create deb, rpm, etc. for a simple GUI app), and many other Flatpak's features can benef…

> I don't get why people in this thread are conflating Flatpak with different ways to do desktop UI.

Flatpak is often used as a solution for creating OS-agnostic distribution packages for applications, by bundling dependencies. This is an example of a solution that provides a standalone binary, obviating the need for the extra complexity of Flatpak.

> Sandboxing, permissions management, separation from system (needed on 'immutable' and image-based distributions), unified package format (don't need to create deb, rpm, etc. for a simple GUI app), and many other Flatpak's features can benefit the devs and the users alike.

These all point out the problems with Flatpak.

Runtime sandboxing is unrelated to packaging and distribution, and having Flatpak do both of these things amounts to poor separation of concerns: how do I use a Flatpak package when I don't want sandboxing, and how do I sandbox a non-Flatpak app? The combinatorics of the use cases involved require multiple simultaneous solutions to both package management and sandboxing, which undermines Flatpak's aspiration to be a universal solution.

The attempt to unify the package format, apart from being a prime example of XKCD 927, also highlights the complexity of package management as a concept. If you're going to bundle dependencies anyway, why bother with building a packaging solution to include dynamically linked libraries? Why not release static builds that minimize the need for packaging in the first place?

The idea of Flatpak being easier on developers masks the attempt to shift packaging responsibility to app devs in the first place -- the traditional approach is that developers just work on their app, and the distro maintainers are the ones who package and distribute it. So this approach is actually extra work for devs.

> That has not much to do with what you use to write UI.

It's less about the UI and more about the self-contained nature of the executables generated by the engine.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#273
post #267

Earlier quoted context omitted.

Qt and Electron output to the OS-level display APIs, where screen rendering is handled by X11, Wayland, Quartz, WDDM, etc., all of which still rely on GPUs for output. Godot, as a game engine, bypasses the OS and uses lower-level graphics APIs like OpenGL and Vulkan. But you only need these APIs available regardless of what hardware is under them, and you can use software-based rendering with e.g. Mesa, Lavapipe, or…

X11, Wayland and WDDM only use the bare minimum functionality from those APIs, so they work just fine on old DX9-level GPUs for example. Godot needs much more recent GPUs.

It's the use case that requires the bare minimum functionality. Godot might require more recent lower-level APIs than the other GUI toolkits, but if the use cases are similar, then it wouldn't require more performance out of them than the other GUI toolkits would. Using software-based implementations of those APIs would more than likely be sufficient, meaning that there's no dependence on any specific class of GPU.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#274
post #104
post #51

This is actually a great proof of concept for using Godot as a cross-platform framework for desktop applications. The distribution package is incredibly simple -- just a single executable and a data file -- and performance is excellent. This seems much superior to Flatpak and the like as a way to offer fully self-contained distro-agnostic binary packages, and vastly superior to Electron in the performance department.…

> This seems much superior to Flatpak and the like as a way to offer fully self-contained distro-agnostic binary packages, and vastly superior to Electron in the performance department. The children yearn for Swing Toolkit

Swing had its issues, along with a lot of advantages over modern approaches to UI.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#275
post #51

This is actually a great proof of concept for using Godot as a cross-platform framework for desktop applications. The distribution package is incredibly simple -- just a single executable and a data file -- and performance is excellent. This seems much superior to Flatpak and the like as a way to offer fully self-contained distro-agnostic binary packages, and vastly superior to Electron in the performance department.…

I seriously doubt it. Game engines are, first and foremost, designed to provide a 2D or 3D graphics environment and input handling, they don't typically have the richness of UI components that you would expect for building a desktop app. Godot is no exception here, its UI components are very dated and limited in comparison what modern web-based applications can do. Furthermore, Godot specifically is limited to a sing…

> Game engines are, first and foremost, designed to provide a 2D or 3D graphics environment and input handling, they don't typically have the richness of UI components that you would expect for building a desktop app.

Games are full desktop applications, ad often have full-featured GUIs overlaid on top of a 3D-rendered playfield.

Certain game genres, especially strategy games and RPGs, regularly implement full UI toolkits, with floating windows, list and table widgets, combo-boxes, toolbars and menu bars, etc. Some games have a superset of standard desktop widgets in order to account for standard UI functionality along with very game-specific needs.

Look at Paradox's grand strategy games for some examples of this. Some people refer to them as "spreadsheet games" because of the complexity of game data and statistics exposed through application-like UI controls.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#276

Earlier quoted context omitted.

> They handle specific subsets of text rendering across a wide range of languages. People radically overstate how hard this is. Yes there’s a lot of cases. But God bless UTF-8 which provides a very clear path. There are countless hobby text editors and libraries that handle literally all of this. > I can't imagine implementing a screen reader without relying heavily on the OS.... Of course. You “just” need to use the…

> But God bless UTF-8 which provides a very clear path. It's a very clear middle finger for CJK users if text rendering issues were dismissed because "we do UTF-8." Thanks to the Unicode Consortium, letters from CJK languages have shared code points in Unicode. This makes it very easy to have, for example, Chinese style fonts sprinkled over Japanese text. This kind of mixed styles are aesthetically inconsistent, unpl…

> i18n is very much not about slapping on UTF-8 support and calling it a day.

Every major game engine has robust support for internationalization. It’s a strict requirement for professional video games.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#277

Earlier quoted context omitted.

It's extensions. Some of them can drag a machine to its knees, with unbounded CPU usage. The worst is the C++ extensions. Gets stuck at 100% CPU if you open a file it doesn't like, which is most of them. VSCode with no extensions is very fast and light. VSCode with 30 extensions you've accumulated? Not so much. I think that's why you see such conflicting experiences - people have different extensions.

I regularly must sit and wait for vscode to catch up rendering the text I just typed. I suspect the main culprit is the vim extension, but unfortunately that's one of the few extensions I cannot go without.

Ah yes the vim extension is known to be an issue. IIRC the problem is it works by hooking into every key press and blocks VSCode in a way that no other extensions really do.

Actually I think Rust analyser had a "smart enter" feature that worked in a similar way and was similarly slow.

Basically if an extension overrides typing then it's going to be slow.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#278
post #255

Earlier quoted context omitted.

Only nerds care about non-native widgets.

And people with disabilities.

Accessibility can be implemented for third party GUI toolkits.

Qt: https://doc.qt.io/qt-6/accessible.html

Web: https://developer.mozilla.org/en-US/docs/Web/Accessibility

Even immediate mode toolkits can do it: https://news.ycombinator.com/item?id=33859697

Accessibility is not a reason to use first party widgets. It's a reason to use widgets with good accessibility support.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#279

Earlier quoted context omitted.

It's impossible to be sure without knowing your programming experience in general across sectors, but it sounds like you are unused to the paradigms of game programming in general, which is centered on logic executed per-frame rather than per-flow (like in business applications, which is where the concept of "business logic" comes from). The default approach in game engines is to bind data including state to an actor…

I certainly am unused to it! maybe I’ll ask some advice: I’m trying to build a circuit simulator. It’s got two main problems to solve: placing and connecting drag and drop electrical components, and the simulation itself. How would you go about this? The existence of the sim means there’s already guaranteed to be some global manager that understands the current layout and can compute from it. What I don’t know is if…

> placing and connecting drag and drop electrical components

This is where game engines are annoying. You have to do "collision checks" between your cursor and any points of interest, like a slot or a grid or a connection. Usually in a 2D use-case like yours, you can just do a geometry condition (if component.x > slot1.x && component.x > and the simulation itself

Depending on the eventual complexity of your circuit simulator, there are pros and cons to different approaches. My undergraduate electronics degree is fading from memory so I might not have the best advice here.

A purely node/actor-based computational simulator is one approach, which reduces dependency on the global manager with knowledge of the layout or handling of the computation. You have to define how each component responds to charge at its input nodes, and manipulates charge at its output nodes, ie, define its response curve in terms of charge. You just have to work with the differential time-equations for computational analysis of electric circuits, not the closed-form analytical ones. ie, substitute I with dQ/dt (charge over time) everywhere, and in every "update" iteration (or "tick" or "frame" or whatever your engine calls them) multiply the differential equation by timeDelta (every engine provides timeDelta as the time elapsed since the last frame). I would give this method a try scoping the project for very simple components (maybe just DC power source, LED, resistors, connector junctions) that can be sized to a grid of discrete sizes.

This can however feel like rediscovering electricity from first principles because traditional circuit equations usually don't work with charge or with time, since they're defining the steady state behaviour.

If you would rather work with traditional steady state electronics formula for each component type, I think your second solution is a decent approach, "passing the result on" from one node into the next (which is the same as making changes to the tree iinm?). Technically using the steady state equations renders ticks irrelevant, other than updating to reflect any changes in the circuit, or if you have time-dependent component behaviour (like an AC signal or an inductor), but that's still a nice feature to have.

I think you should try avoiding reliance on a global manager for anything that goes on in the simulation as much as possible, because I sense you will tend towards "centralized application logic" if you allow yourself that luxury. The whole point of game engines is to break down your logic into different actors that interact with each other, and a simulation is exactly that.

Re: Show HN: GodotOS – Fake operating system interface made in the Godot engine

#280

Looks great! I know there are a bunch of games that use this kind of setting (fake OS) as the main mechanic. Her Story comes to mind [1]. 1: https://store.steampowered.com/app/368370/Her_Story/

Hypnospace Outlaw is the absolute MVP of this category. That game is a trip.

Thanks for the mention! I remember playing a bit of the previous game from the same author (Dropsy!)
Post reply on HN