1. 23

    I’d just like to interject for a moment. What you’re refering to as Linux, is in fact, systemd/Linux, or as I’ve recently taken to calling it, systemd plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning systemd system made useful by the systemd corelibs, shell utilities and vital system components comprising a full OS as defined by Red Hat.

    Many computer users run a modified version of the systemd system every day, without realizing it. Through a peculiar turn of events, the version of systemd which is widely used today is often called Linux, and many of its users are not aware that it is basically the systemd system, developed by the systemd project.

    (more seriously, this gets truer every year.)

    1. 1

      The edit didn’t fix it. :(

      1. 1

        Should be fixed now.

        Also, I do think systemd enables some neat things–NixOS being one of them. But, it’s still fun to rag on.

        1.  

          I would not say that systemd enables NixOS. NixOS ran fine on upstart. There were some issues with impedance mismatch, and there are some different ones (and also some required custom patches) with systemd. Guix might have given up, but they ran their own Shepherd thing just fine. And well, the features of NixOS that make it different — I have these on a system running sinit as PID1 right now (using Nix/Nixpkgs and some chunks of NixOS code). What I lose and what I get rid of are some systemd-specific behaviours (some bad, some good, but I have no use for the good ones), not really anything NixOS-specific.

          1.  

            It’d be awesome if you could go into your process there and how you ended up with what you did!

            1.  

              Hm. It seems to be a long-ish story, and part rant on systemd. And offtopic. But I do not want to link my work and explicitly say it is my work but signed by my different identity (people making inferences is fine, that activity is limited to people with common interests). So I guess here it goes https://friendpaste.com/1pqXzSdNjIkjo8ubuhilUY

    1. 6

      Out of curiosity, I just installed Opera 12, the last release for FreeBSD and it works really well for being 7 years old. I had to symlink /usr/local/lib/libfreetype.so to /usr/local/lib/libfreetype.so.9, but that doesn’t seem to cause any problems.

      Some issues I’ve encountered after ~10 minutes of browsing:

      • Lobste.rs initially gave a “Handshake failed because the server does not want to accept the enabled SSL/TLS protocol versions.” error, which is actually explained on the error page. I enabled all of the security protocols in the settings and restarted, and it seems to work with TLS 1.2 now, and I’m typing this message in it.
      • Some fields on Github’s new code view page show as empty rectangles. Specifically the last commit messages and the last modified dates.
      • Some sites (reuters, NYTimes) have a big pause the first time they load. Maybe the JS is running synchronously and blocking the main thread?
      • The reuters.com main page displays fine, but images don’t show up after clicking through to the articles. This is almost certainly due to the javascript slide-show they use.
      • Some HTTPS sites just refuse to load, I suspect they’re using TLS>1.2. Opera only exposes a UI to enable TLS up to 1.2, but maybe there’s workaround editing INI files directly…
      • Wikipedia redirects every page to a “Your Browser’s Connection Security is Outdated” page

      If it weren’t for the HTTPS issues, I’d say it’s still usable for day to day browsing - at least for me.

      Edit: After browsing around a bit longer, I’ve gotten a few random crashes. Maybe something to do with the freetype library hack? In any case, it’s nice enough to bring up a crash dialog that offers to restart with the last set of tabs open and unlike the “Firefox needs to update and restart” dialog, Opera actually restarts with the tabs open.

      1. 3

        Pretty sure O12 predates TLS 1.3 (at least the current spec), so I think 1.2 is the best you’re going to get.

        1. 1

          Well, I guess there is an option of using a MITM proxy in front of the browser. I think Squid has an option to install a proxy CA in the browser and craft certificates that have the same «verification status» but relative to a different CA.

          1. 1

            Do you have any resources on setting up Squid to effectively downgrade TLS? Last I looked into it, I couldn’t seem to make Squid do what I wanted to from reading their documentation.

            1. 1

              I never got around to set this up as my real-browser usage went a bit down and domain-based blocking works well enough.

              Current Squid Wiki seems to imply it negotiates protocol details independently with client and server; apparently (looking at Stack Exchange) by enforcing bump on the step 1 (in the very beginning) it worked a few years ago, but did not mimick the certificate status properly.

        2. 2

          Nice experiment!

          I’ve disabled TLS 1.3 in my Firefox (it does 1.2 only). I’ve been browsing like this for over a year, but I’ve never hit a site that refused to load because of this. Maybe Opera is missing some cipher suites in TLS 1.2?

        1. 15

          Interesting project, but this marketing BS is not a good link for Lobsters. Here are the very basic questions I had about Nanos:

          • Does it descend from some pre-existing system?
          • What language is it implemented in?
          • How is it licensed?
          • Who supports its development, and what is their business model?

          To answer all but the last of these, I had to click around and find the github repo. The FAQ on this marketing site is pretty vacuous. “Syscalls: N/A” lol.

          Anyway, I think I’ll stick with https://mirage.io/ for my unikernel needs. But thanks for sharing!

          1. 5

            This site is a WIP - literally went up yesterday.

            Also, this is not intended to be a marketing site - it’s a community site. I was curious if the lobsters crowd would cast it as such but since I have seen plenty of other sites like ziglang with ‘donate now’ buttons figured one link on a community site wouldn’t be ‘marketing’.

            As for the questions:

            1. No. From the ground up it’s written in scratch - github.com/nanovms/nanos .
            2. C (mostly)
            3. Apache 2 - https://github.com/nanovms/nanos/blob/master/LICENSE
            4. NanoVMs - (the real marketing site ;)
            1. 5

              If it’s a WIP, why did you post it here?

              A donate button doesn’t make a marketing site, but there’s almost no substantial content — barely a synopsis — and it is indeed mostly trying to convince you to use it. That’s marketing.

              1. 6

                Are WIPs not allowed to be posted to Lobsters? Zig is a WIP, it’s at 0.6.0. Can we not link to a Zig release page?

                1. 5

                  No, of course it’s fine; the point is someone said “weird that this page is missing these basic things” and the author replied “the site is a WIP, it only went up yesterday” to explain why these basic things are missing. Both are talking about the site, not the software itself, because they’re talking about the submission, not the product, which is a distinction so many people in this thread can seemingly not make.

                  Lobsters is about discussing submissions, right? If you feel the need to defend your submission by saying “it’s a WIP, it only went up yesterday” when someone points out key information is missing, I don’t think you should have posted it yet. What’s the rush?

                2. 3

                  If it is not appropriate I apologize, although, I feel lobste.rs should post a guidelines document as I see a lot of links posted that have commercial links back and I can’t think of a single OSS project that is commercially supported that doesn’t have a link back.

                  Just now I found the following on lobste.rs - all that had more than one link going to a commercial post:

                  https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/ https://android-developers.googleblog.com/2020/09/android11-final-release.html https://blog.ipfs.io/2020-09-08-nix-ipfs-milestone-1/

                  1. 7

                    Like I said, the donate button isn’t what matters, and the examples you’ve given serve my point: they are chock full of technical content and detail, which is what we want to see here. This submission has almost no substance.

                    1. 4

                      A new operating system and a new file system aren’t technical enough?

                      This “submission” is backed up by multiple repositories of open source code:

                      https://github.com/nanovms/nanos

                      Where is this aggression coming from?

                      1. 15

                        There’s sincerely no aggression; you’re asking about what’s appropriate and I’m doing my best to help you understand why (from my point of view) I feel this isn’t an appropriate submission. I think my opinion is at least somewhat representative of community norms based on votes. I’m not attacking you, I’m sharing my context. You don’t have to agree with my assessment.

                        The page is light on detail and mostly serves to advertise. That’s what it comes down to. I don’t think this submission adds anything. The direct repo link would always be better, or a technical detail post.

                        And yes, you posted the repo a little while ago, and that’s okay. If there’s a new release, link to the patch notes instead. Reposting the same link isn’t forbidden either, especially if there’s been big changes.

                        1. -4

                          I think a lot of people would find these comments aggressive - maybe you can disclose your real name and who you work for. :) (That’s ok, you don’t have to.)

                          You are most definitely correct that it does to advertise the community aspect of the operating system. I’m sorry if you are looking for a corporate only POV. I won’t advertise it here but you can easily find it.

                          I’m glad you don’t find patch notes offensive - I’d find any patch notes offensive that are offensive. Nanos.org is a brand new site so sorry no new changes.

                          1. 14

                            I actually found your comments to be on the aggressive side, while others tried to explain their views on why your post is flagged. And the length of their posts implies it’s a sincere efforts.

                            1. 10

                              maybe you can disclose your real name and who you work for.

                              This is in bad faith. Additionally, my real name and employer are trivial to locate. I really think you should reevaluate your angle here.

                              I’m sorry if you are looking for a corporate only POV.

                              I have to believe you’re being intentionally obtuse in light of my suggesting “the direct repo link” or “a technical detail post”. I’ve really tried only to be kind in my comments here and represent my views to get to a shared understanding with you, but you seem to consistently engage in hostility and points raised while further stirring things up.

                          2. 4

                            Where is this aggression coming from?

                            There seems to be a misunderstanding here. I think absolutely nobody is objecting to submitting Nanos, that would be ridiculous. People are objecting (although I disagree) to submitting the URL https://nanos.org/, instead of (more relevant) URL https://github.com/nanovms/nanos.

                            I hope this makes things clear.

                            1. 1

                              The nanos.org website, is strictly for providing a place for the community to place a voice outside of the company. One of the reasons of having a community site was to move a lot of knowledge that was in engineers heads to the community in the hopes that it would not be lost.

                              The very fact that it is a .org and not a .com, should be painfully clear but in 2020 I realize that is just not something that works with everyone.

                              Just as kernel.org is an .org, yet retains logos from Fastly, Packet, Redhat, Google and many others, nanos.org is an open source site with source code found elsewhere.

                              Is this such a problem?

                              1. 5

                                Submitting a site structured like kernel.org would indeed meet some annoyance, because there is nothing to read on this page, and not clear which of the links you considered most worth following. You could pick one previously unposted of the many pages you have mentioned with technical substance and say in the comments that «We are currently working on building a community site on nanos.org and making the linked material available (or updating it) was a part of that work». That would look in a different way.

                                Note that a page that looks like a pure advertisement for a community is still pure advertisement, even if of a slightly different kind compared to commercial advertisement.

                                I guess you could imagine the following imaginary (or is it?) use case for Lobste.rs: automatically download the linked articles and separately comments automatically and read them offline. If changing what you link to and mentioning the original link in the first comment would increase the value for such a use case and not clearly decrease the value for the more typical use, it is likely that such a replacement would also improve the reception here.

                                1. 0

                                  Submitting a site structured like kernel.org would indeed meet some annoyance

                                  Are you kidding me?

                                  I guess I was wrong in posting a free/open source community based website to lobste.rs - I’ll refrain from that in the future. So much hostility.

                                  1. 3

                                    Strictly speaking, you were submitting a page, submissions are not really read as sites — there are surely many good pages on your site to submit.

                                    1. 1

                                      I still don’t understand the frustration here. Is the main page not the most direct way to announce a public free open source tool that did not have it before?

                                      If you had never heard of rust before aside from a few coworkers chatting about it and rust-lang.org didn’t exist but then it pops out of existence you wouldn’t find it appropriate to post?

                                      1. 5

                                        rust-lang.org goes in somewhat more details than the current state of nanos.org, and I guess a more detailed page about what choices Rust makes would be a better choice than the main page.

                                        Many of us want to click the link and find a page containing a text about something technical that directly convinces us to care. Currently nanos.org tells me «Nanos is a unikernel» and nothing else (sure, almost every unikernel will mention that avoiding context switches will improve performance in read()-bottlenecked tests), then there are some links. I can easily understand people preferring to get a submission where the main link goes to a substantial text, not to a place where you need to find out which link to click to get the text. (I personally did not flag this submission, though)

                                        1. 2

                                          I 100% agree there should be more detailed documentation and there most definitely will be, it’s a work in progress.

                                          I suppose all the frustration can be summed up with “come back when there is X bytes of technical documentation and link to that rather than the front page”. Noted.

                            2. 3

                              Literally nothing about the link you used for the submission is technical at all. It’s a marketing splash page.

                              1. 1

                                Literally? Nothing?

                                https://nanos.org/thebook isn’t technical at all? After one day? With links to pull requests of code? and binary serialization formats for a non extX filesystem?

                                Please.

                                1. 5

                                  Then why didn’t you link to the book? Remember, I said the link you used for the submission.

                                  1. 2

                                    It’s a link from the main site…

                    2. 5

                      Anyway, I think I’ll stick with https://mirage.io/ for my unikernel needs.

                      I only just looked into this stuff but… all of MirageOS’s peers are dead. So I think I welcome anyone new in the space. We need progress and competition!!!

                      1. 3

                        Good point, but it perhaps says something about the unikernel concept itself and how it’s played out in practice. Overall, I agree, and I’m happy to see Other People’s Money being spent on a technical subject I personally find interesting. I sincerely wish the nanos folks all kinds of success.

                        At the same time, I must admit to having some doubts about the wisdom of implementing a unikernel with a completely fresh code base in a famously unsafe language, but hey, I guess we’ll see how it plays out.

                        1. 2

                          The money point is important to point out. It’s not something you can just whip together in a weekend and not something I could see happening without lots of $$ to employ full time engineers on. Even then the difference between hello world and production usability is a huge gulf to cross - most teams unfortunately die before they can cross it. That in my most humble opinion is the biggest problem in the ecosystem. Government grants can only take you so far.

                          I hear your complaint against c. We’ve discussed doing other complementary projects in rust but the pkg/dep system is a major turn off and none of our engineers speak rust either other than hello world projects. Likewise $$ again is a prime concern for working in that ecosystem. When you have tiny little saas companies that raise tens of millions and employ tens to hundreds of software engineers you have to ask what is the true cost of a new language or a new operating system?

                          1. 2

                            All very cogent points, and be it far from me to armchair-quarterback anyone’s business strategy. Application support is probably the first priority for a real-world unikernel, and that drags in legacy APIs and other ecosystem factors that we can’t really control. Latent security problems only become critical when you actually have some customers.

                            I’ve had a corner of an eye on this space for a little while, but I wouldn’t claim any expertise. To me, it seems like Mirage has carved out a bit of a niche and, like many open source projects, is sort of puttering along just fine with little in the way of sponsorship. But its adoption is of course limited to the (relatively tiny) Ocaml ecosystem. Then there’s the rump kernel approach, which largely piggybacks on NetBSD’s flexibility and mature-ish code base. Looks like there’s some consultancies promoting that. Probably works great for some applications. Doesn’t appear to need VC, at a glance.

                            The only unikernel I have had any real first-hand experience with is HalVM. I can assure our readers that no realistic amount of government grants or eager first customers could have saved it from drowning in its own space leaks. Haskell itself is largely subsidized by the academic tenure system, and is thus well insulated from its own practical failings, but that’s another story entirely.

                            1. 2

                              Agree with most of this, however, Antti spent something like well over a decade fleshing out rump - and that was on top of netbsd which was forked 27 years ago so I wouldn’t agree that the ecosystem doesn’t need financial resources. The EU is trying to pump some money into the ecosystem thankfully. There indeed are a few consultancies but they tend to come and go (again lack of resources) - I keep a running list.

                          2. 1

                            in a famously unsafe language

                            Oof. I only just noticed it’s in C. Okay, I’ll root for it, but hopefully they’re making up for that handicap.

                        2. 1

                          This community has become so fucking toxic! It’s really sad that I now no longer enjoy reading the comments. I use to come here for the fun technical discussions. But once again the internet has ruined another great website. jcs should have kept everything invite only and small. No wonder he gave up and walked away…

                          1. 2

                            I think what you’re witnessing is the site adjusting to a course correction toward its original purpose. A few people were making a push toward getting more ‘culture’ related content on the front page, and that’s not what this site has ever been about. Some folks have been pushing back.

                            Fortunately, in the last few months I’ve seen more interesting material hitting the front page than in recent years, and the comments are still well worth exploring (in those threads). Anything resembling “toxicity” comes in ‘culture’ tagged articles.

                        1. 2

                          Nanos looks very interesting, thanks for sharing!

                          I don’t get why some folks are annoyed about you posting a link to the site, it gives me a good idea about what Nanos and the ops tool do, at a glance.

                          1. 3

                            Really? I have literally no idea what Nanos is or does except “runs applications” on a unikernel. Would you mind sharing what it is Nanos actually does?

                            1. 5

                              Nanos is a Linux syscall compatible unikernel. It seems to be a less mature OSv, another Linux syscall compatible unikernel.

                              1. 3

                                Thank you, the OSv site was really helpful.

                                1. 2

                                  I always forget about OSv but it does look pretty awesome. Do you also know about UniK?

                              2. 3

                                Mind sharing your good idea? What does Nanos do, and what does the ops tool do? I couldn’t tell, at a glance. I didn’t find “run code faster than the speed of light” to be informative, the FAQ didn’t say much, and all 600-ish words of “the book” tell me it’s a unikernal that’s opinionated about security but doesn’t say what it’s good for or why I might want to use it.

                                I could tell from “getting started” that they wanted me to pipe some script from curl to sh, but I didn’t want to do that, especially before I understood what those things do and why I might want to use them.

                                1. 3

                                  Nanos is not Linux (it is an independent implementation, so for example, as noted above, it uses lwIP as a network stack, not the Linux network stack), but it can run Linux binaries, by emulating Linux’s ABI and syscall interface. It claims to run Linux binaries better than Linux in some sense, for example by being faster. Nanos probably can’t ever be better in Linux binary compatibility than Linux, but it claims to be good enough.

                                  1. 2

                                    But it claims it can’t run on bare hardware, right, so I’d need to run it on top of KVM or Xen, which means I’d need to run Linux also? Even just to fire up a VM on VMWare workstation and try it out?

                                    And “the book” claims it has no syscalls…

                                    How is it faster than running Linux binaries than Linux is, if I need to fire up KVM or Xen in order to bootstrap it? Why wouldn’t I just statically link my binaries and directly run them on the host, sandboxed?

                                    I’ve spent 5 minutes looking at the github site, which is a little more helpful than the site OP linked, but I’m still not sure what my use case is for this yet, even though it does sound interesting.

                                    1. 2

                                      Let’s say you were running Linux on AWS virtualized (very common scenario). Since you weren’t running on bare hardware anyway, there is no disadvantage to switching to Nanos on that scenario, from that reason.

                                      It has no syscalls in a sense that there is no transition from user mode to kernel mode. Your code runs in kernel mode, and Linux syscalls are emulated as function calls.

                                      I haven’t done benchmarks myself, but it is very believable Nanos runs some Linux binaries faster than Linux, since it does less than Linux. As I noted above, there is no syscall transition, which is often a significant overhead. There is also no users and no processes: you are the only user, and your code is the only process. This does greatly simplify what the “kernel” (quoted, since technically your code is kernel) needs to do.

                                      1. 2

                                        We actually do keep CPL for no other reason that if you have certain pages that are say only readable you don’t want an attacker to make them writeable (and that still gives us a speed boost). Context switching can imply a few different scenarios depending on context (heh!). Kernel -> User, kthread to kthread, user -> user, etc. We’ve found that a lot of the heavy switching is actually a result of the fact that modern GPOS like linux have hundreds of user processes upon boot even if the intention is to only run a single application (which is very common in server-side deployments).

                                        1. 2

                                          Thanks for the correction.

                                          Since you are here, I want to ask why should I run Nanos instead of OSv. Since two seem to be in a similar niche, a good comparison would be welcome.

                                          1. 3

                                            First off, I very much respect the OSv engineers, however, the corporate side of that has moved on to https://www.scylladb.com/ which makes governance a bit of an issue (for us). There are a handful of architectural differences. We have strived to be as binary compatible towards linux as possible (elf loading, using whatever libc the app is linked to, etc.) We also approached the niche from a security POV, versus the performance view so that’s where we’ve focused. It should be noted that all of these are very much operating systems just not general purpose operating systems and so each one has a lot of engineer hours that go into it. So each system excels in various areas where others might be deficient. This is compounded by the fact that most unikernel enthusiasts are motivated by different goals/needs (NFV, edge, performance, security, etc.).

                                        2. 1

                                          I think where I’m getting lost is looking at the proposed getting started workflow captured in this image:

                                          https://nanos.org/static/img/terminal-2.png

                                          That looks to me like it’s running on a linux host, and I think that is contributing to my confusion, if the real idea is that I should be replacing Linux with this on some public cloud hypervisor. Which leaves me needing to go understand the ops tool, I think, in order to assess whether this might fit into my workflow or offer any benefit.

                                          Thanks for jumping in and explaining… I hadn’t spotted where in the stack this fits, and that’s helpful.

                                          1. 3

                                            The image indeed shows running on Linux host. As I understand, it is for convenience, and it launches KVM behind the scene.

                                            The real idea is indeed replacing Linux with Nanos on public cloud. This chapter on how to create AWS image should make things clearer.

                                            1. 1

                                              The ops tool is complementary. You can envision it as something comparable to terraform/chef/puppet (but not really). The idea is that most end-users provision their web application software (eg: all websites) to various public cloud providers which we support every single popular one. There’s a lot of api involved that is not proper to put into the core kernel nanos and if you dive into nanos further you’ll find things like the filesystem manifest which for real applications can get rather large (think jvm or python applications). Ops also helps in this regard by generating that on demand.

                                              ops can be ran on linux and mac today and we have someone working on windows as we speak.

                                          2. 1

                                            It very much does have syscalls. That section is empty because it needs to be filled out. There are some syscalls we support 100%. Some are stubbed out (on purpose). Some are implemented differently.

                                            You are right it most definitely is not written for bare metal. It is written for most production web application environments which run predominately on the public cloud (aws, gcloud, etc.) which use 2 layers of linux. One for the hypervisor layer and one for guest. This replaces the guest layer.

                                            1. 2

                                              Thanks. That clarifies it some. I think I need to understand some details about the ops tool in order to evaluate further. If you’re working on the site, that might be a good thing to expand on.

                                              1. 1

                                                For sure - thank you for the suggestion!

                                        3. 1

                                          One of the whole reasons for the site is to provide more documentation that would be hard to grok from the code alone.

                                          Nanos is meant to be a server-side only system of running linux applications with a focus on performance and security. For the install script - it points to https://github.com/nanovms/ops/blob/master/install.sh which is viewable/editable on github. You don’t have to use it and can opt to build from source instead.

                                          1. 2

                                            I think I understood that the intention of the site is to provide info that would be hard to absorb from just looking at a git repository. The feedback I was offering is that the “what” and “why” information that might make me want to try it out isn’t robust enough for me to understand yet, and the “getting started” information that is on the site leaves me needing to go pick through a git repository and read the source code for an install script/orchestration tool in order to feel comfortable that I understand what it claims it will do before I run it.

                                            1. 2

                                              I fully agree that we need/want more documentation/information - that’s the whole purpose of the site. We have decent documentation for OPS https://nanovms.gitbook.io/ops/ that is fully PR’able on github but that provides no justice for Nanos itself which is way more technical and since OPS isn’t the only horse in town we wanted a central place to detail nanos much like a rust-lang.org .

                                              1. 1

                                                Nice overview, thanks

                                      1. 5

                                        The Linux ecosystem can and should do better.

                                        Yes. I love working on Linux desktops but key bindings are one of my 2 pet peeves. Right now I’m using xmodmap and while it is flexible, it randomly loses the remap during work.

                                        The other one is setting default applications, this is a million times easier on Windows.

                                        1. 3

                                          randomly loses the remap during work

                                          Just a stupid guess: is there any chance it is correlated with adding/removing/reconnecting the keyboard? Not sure how to detect the last case, of course…

                                          1. 1

                                            No, I don’t reconnect it most days and I’ve never noticed any other oddity. :(

                                            1. 2

                                              Did you check dmesg to make sure something doesn’t randomly decide to drop everything and reenumerate? I definitely have seen USB hubs reinitialise for no clear reason (or maybe some power negotiation went wrong)

                                          2. 2

                                            Instead of xmodmap, you might want to look into QMK. In addition to modifying keys via keyboard fimware, it lets you add “layers” to your keyboard to get a more modal approach.

                                            You can switch the main alphabetical section of your keyboard between alphabet, numeric+function, arrow keys + home/pg{up,down}/ins/del, etc.

                                            1. 1

                                              I know about QMK but I didn’t know it can work with generic keyboards that don’t have QMK support per se, if I’m understanding you correctly. Will have another look but I don’t want to change/brick this keyboard :)

                                            2. 1

                                              Right now I’m using xmodmap and while it is flexible, it randomly loses the remap during work.

                                              Maybe it is interfering with your window manager?

                                              I’m using xmodmap too, but haven’t encountered any glitches yet.

                                              1. 1

                                                Yeah I thought about it but I’ve been having the same problem on 2 different machines with different complete reinstalls, and ofc different versions of i3. Could still be i3, of course…

                                              2. 1

                                                and alas xmodmap won’t help you on wayland, either. I rely upon Xcompose a lot myself, same issue.

                                                1. 1

                                                  Right now I’m using xmodmap and while it is flexible, it randomly loses the remap during work.

                                                  You should report this as a bug. I’ve never experienced it.

                                                  1. 2

                                                    As some other commenter mentioned it’s not a common problem. Also I have talked to several xmodmap users and no one ever had that, so I’m pretty sure it’s some weird interaction of something resetting it actively. I don’t know where to report it as I don’t know the culprit. (I’ve originally used someone else’s config, and it worked on other machines so I don’t think xmodmap is doing it itself)

                                                1. 1

                                                  LinuxCNC controls CNC machines. It can drive milling machines, lathes, 3d printers, laser cutters, plasma cutters, robot arms, hexapods, and more.

                                                  Runs under Linux (optionally with realtime extensions).

                                                  I see the dependency on Linux (even the name!) as unfortunate.

                                                  1. 4

                                                    What are your main concerns? What would you do differently?

                                                    1. 1

                                                      I’d care about supporting non-Linux OSs, particularly the OSS ones, and avoid including Linux in the project name.

                                                      1. 5

                                                        Patch or gtfo then :)

                                                        1. 2

                                                          Cross-OS for its own sake is fair enough I suppose, though I’d still be interested to know what about Linux you think is unfortunate as the OS of choice for this project, or why you think another would be better.

                                                          My take on this is: it’s a piece of software designed for industrial control with hard real-time requirements. As one of my mentors liked to say, a mill or a lathe isn’t the kind of equipment that just hurts you, it rips your arm off and beats you to death with it. I’m glad that they’re limiting their scope to a single kernel. Last I read an article about achieving hard real-time on Linux, it wasn’t exactly lacking nuance or pitfalls. Add more supported kernels and you multiply the chances that you introduce a bug, miss timing, and destroy the work/machine/operator.

                                                          I’d also like to point out that they don’t owe anyone cross-OS support. Including Linux in the name actually emphasizes their right to build what they want. The creators set out to create a CNC machine controller for Linux. If you want support for another OS, the source is GPLv2 :)

                                                          1. 1

                                                            what about Linux you think is unfortunate as the OS of choice for this project,

                                                            I’ll say as a start I don’t think there’s anything terribly wrong with doing CNC with Linux.

                                                            Yet my suspicion is that, despite the name, there’s technically not much tying this project to Linux specifically.

                                                            Which makes the name truly unfortunate.

                                                            1. 6

                                                              A brief look at the project reveals that they ship Linux kernel modules for controlling hardware via supported interfaces, and for any use with real hardware Linux kernel with -rt patchset is needed on the controlling computer. This surely makes moving to another kernel quite a large effort, as realtime drivers need to be ported. And the recommended installation method is a Debian-derivative GNU/Linux distribution.

                                                              So I would expect getting a good enough port to be a large undertaking, with benefits of using another OS inside that black box even harder to realise because the number of users with hardware access matters for testing.

                                                              1. 1

                                                                So it is forcibly an ugly design, as we know it has to resort to kernel modules as Linux itself is ill-suited to abstract the hardware and enable doing the heavy lifting in user space. Noted.

                                                                Maybe the name is not wrong, in hindsight.

                                                                1. 5

                                                                  Sure, they do have a userspace implementation, and apparently recommend the standard Preempt-RT patchset with user-space control implementation for some cases. It’s just that for many cases RTAI kernel and a kernel-space driver yield lower latency. Indeed, Linux is not a microkernel, so context switches have some costs.

                                                                  Sure, making something realtime on top of a general-purpose non-realtime OS has its drawbacks, and the best latency will need some amount of special-case work. But it improves the chances of reusing some computer that is already around.

                                                                  User-space real-time API-wise they claim to support Preempt-RT, RTAI and Xenomai kernels (all Linux-based).

                                                                  1. 3

                                                                    Such machines rely on hard realtime controls and are very often done in microcontrollers. Latency is a huge constraint of the project. The project itself is very old: it dates back to the mid 90s: there wasn’t a lot of CPU power back then (especially on the ARM targets) and less knowledge and development to achieve hard real-time.

                                                                    1. 1

                                                                      Are you aware of an open effort using microcontrollers?

                                                                      1. 2

                                                                        GRBL, I guess? Somewhat limited and recently inactive, but apparently usable for many usecases.

                                                                        1. 3

                                                                          recently inactive

                                                                          There seems to be a maintained fork. There’s not much in terms of changes, but I suspect that’s because it reached a “just works” point.

                                                                          No strange latency surprises to be had with these microcontrollers.

                                                                          1. 2

                                                                            Yes, I meant this repository as the main development line, and it doesn’t seem to have firmly decided to never get to 5-axis support, so there is a clearly stated missing feature with respect to which it could be active but isn’t. Doesn’t matter for use cases where it fits, of course.

                                                                        2. 1

                                                                          The project wiki (section 4) describes why they chose not to use an external microcontroller as a motion controller.

                                                                          It also says there was a hard fork which adds support for a particular external microcontroller.

                                                                          1. 1

                                                                            I see… ultimately they do like their scope and meters, on their computer.

                                                                  2. 1

                                                                    Yet my suspicion is that, despite the name, there’s technically not much tying this project to Linux specifically.

                                                                    I’m unfamiliar with the real-time / CNC space. What other non-GPL/OSS kernel systems have support for the kind of real-time performance required by these machines?

                                                                    1. 1

                                                                      What other non-GPL/OSS kernel systems have support for the kind of real-time performance required by these machines?

                                                                      As a reminder, Linux isn’t exactly awesome at real time, particularly awful without rt patchset (and project seems to work w/o that), thus the requirements can’t be that strict, and there should be plenty of systems that meet them.

                                                                      1. 3

                                                                        In the system requirements documentation:

                                                                        It can, however run on a standard kernel in simulation mode for purposes such as checking G-code, testing config files and learning the system.

                                                                        So, non-RT Linux allows to do a subset of work that doesn’t involve driving hardware.

                                                            2. 3

                                                              Are you coming at it from a principle perspective or practical?

                                                              From a practical point, several of the newer commercial control systems like Heidenhain and Siemens and probably more I can’t remember, have Linux base for the user interface.

                                                              Both works fine in daily use at the day job.

                                                              And is Windows really a better option? I know Datron’s Next control is lovely and easy to use on the commercial side. Others include Centroid, UCCNC, Kflop, Planet CNC and Mach3 & 4.

                                                              All require specific electronics anyway that usually does the heavy lifting in serious (non hobby) use.

                                                              From a principle point, I’d like to hear more.

                                                            1. 17

                                                              I like this idea of trying to succeed by winning points, but I feel like programming isn’t even the game most of the time. A lot of software fails before it even gets to the coding stage with vague or ill-conceived notions of the goals of the actual project.

                                                              1. 6

                                                                Well, yes, and this is a part of the point: if implementation affects the outcome, it is more probably because it was just too bad. Otherwise managing lock-in beats features anyway…

                                                                1. 6

                                                                  Cool. So my caffeine didn’t kick in before I posted and I’m on the page as the author. Nice. My point which I share with the author, was that you can be in a situation as a developer, where it’s impossible to win regardless of the quality of your implementation. If the company is producing something no one wants, you can’t win. You can definitely tank a possibly successful product with a horrible enough code base, but I’ve seen multiple successful products with very questionable codebases when open sourced. As a developer, you can’t force success, but you can guarantee failure.

                                                                  1. 3

                                                                    If these code practices were that bad, you would know the code quality is bad without open-sourcing, just from the bugs!

                                                                    When you cannot win the top-level game, it is often not your game to play anyway! Just play well whatever subgame you do have access to, and prepare to avoid being hit too badly when the entire thing crashes…

                                                                    (As a sad remark, of course you can win if the company produces something noone wants. It just needs to produce something someone with resources wants to force onto others.)

                                                              1. 3

                                                                Anything that puts food on the table is a winners game. Constraints on previously stated “anything” apply (ethics, legality, etc).

                                                                1. 10

                                                                  Please read the post before you comment. Comments based only on the title, especially inserting a hyperbolic claim like starvation, don’t typically lead to very good conversations.

                                                                  1. 2

                                                                    I actually did. I am just using a different single variable to model a winning vs losing game, not tennis points.

                                                                  2. 6

                                                                    I don’t think the article claims otherwise?

                                                                    It classifies the games into winners games where one needs to win by succeeding at more posotove feats than the competition, and losers games where one needs to win by making fewer mistakes.

                                                                    1. 3

                                                                      If I am a professional programmer I score more positive points than the competition when the product sells (for some definition of sell).

                                                                      If I am an amateur programmer, I may occasionally have the brilliant buzzer-beater, which I will remember for all my life (“once upon a time I wrote a 100 line SQL query”), but essentially I am not making a living out of it.

                                                                      Hence, if it puts food on the table it is a winning game. That is my POV.

                                                                      1. 5

                                                                        I have written a ton of stuff where I needed to negotiate the scope and then the thing that mattered most was having few enough problems, not doing something better — just to agreed spec is fine. It was paid work.

                                                                        You can say that the outcome was winning; the point of the distinction the article makes is that it was winning by default, winning by not losing and getting to the completion.

                                                                        I have also written code where you need to win by scoring positive achievements, it surely is a different activity, often with a slightly different feel. (Whether paid or purely for fun) Even if the avoid-negatives code has some positive achievements later allowing it to survive further evolution.

                                                                      2. 3

                                                                        Thanks for explaining that – the title was so off-putting to me that I wouldn’t have read the article if you hadn’t explained the title.

                                                                        For anybody on the fence, the article is actually fine.

                                                                    1. 5

                                                                      Editors are not a group you can reasonably compare. A JPEG editor and a WAV editor have nothing in common and exactly the same applies to “text” editors. You don’t want to edit HTML and Java and Latex and ToDos and emails in the same way.

                                                                      If you squint a little you probably would want to edit all programs in the same way but that unfortunately doesn’t work because you just cannot refactor Python like you refactor Java. So even trying to do such a comparison for IDEs is tricky.

                                                                      All of these discussions about how far away the arrow keys - or your mouse - are, are completely pointless in comparison. This article almost caught on to this fact and gives a list of editors with their strength but doesn’t make it to the conclusion that text editors are just not a reasonable thing to discuss anymore. Nobody edits “text”. And the people who do use Word.

                                                                      1. 9

                                                                        All of these discussions about how far away the arrow keys - or your mouse - are, are completely pointless in comparison. This article almost caught on to this fact and gives a list of editors with their strength but doesn’t make it to the conclusion that text editors are just not a reasonable thing to discuss anymore. Nobody edits “text”. And the people who do use Word.

                                                                        That’s amusing. Just last night my roommate had a problem where all the cells in her document were set to “£0.00” after saving, it would have taken about 8 hours for her to recover it.

                                                                        Luckily she already had the list, she just wanted it in a Libreoffice table. I opened vim (Because raw sed is line-based), and just used the expressions: :%s/$/"/, :%s/ \r/, "/. I saved it as a .csv and opened it in Libreoffice Calc, copied the cells, then imported it into Writer by doing C-V and selecting “RTF”.

                                                                        It took five minutes, not 8 hours. A handful of small adjustments that added 2 minutes on to it, and the table was exactly as before.

                                                                        You are severely underestimating the power and use of the tools programmers have been using for the last 60 years. The arrogance on display is absolutely staggering.

                                                                        The purpose of a tool like Vim, is to make your editing commands become muscle memory, so you do not have to think about what you want to do, and then do it. You can simply do it reflexively. I’ve been using it for 8 years on all kinds of information, and it’s extremely powerful.

                                                                        I wonder, when I hit d} in vim, am I still editing text? The operation itself runs over a paragraph. What about di) which deletes the contents of a set of brackets, do you think you can find a use for that in programming? If your answer here is “paragraphs and argument lists are all text”, that means you’re coming close to the realization that “XML is text”, “S-Expressions are text”, and pretty much every format you can think of is a form of text.

                                                                        Is ParEdit, a mode for editing the structure of Lisp documents in Emacs, still editing text? What about rope, a refactoring tool for Python with both Emacs and Vim plugins, when you use those plugins, are you still editing text? Vim provides an interface for “text objects”, which allow you to manipulate XML rather easily, are you editing text, or the objects? Of course you are editing text. Because everything that isn’t a binary format is text.

                                                                        In addition, both Emacs and Vim have binary editors built in. They both have extensive sets of plugins for editing programming languages while retaining the power of each environment, and the benefit of a uniform interface that you have experience and will log 100s of hours in.

                                                                        You don’t want to edit HTML and Java and Latex and ToDos and emails in the same way.

                                                                        You’re right, however, that you don’t want to edit all programs the same way. However, most modern text editors have functionality specific to what you’re editing. Hell, the exact commands used for alphabetically sorting the contents of CSS directives in Vim (:%g/{/ .+1,/}/-1 sort) dates back to before Vim existed – it was a feature of ed(1) – which isn’t even visual!

                                                                        1. 2

                                                                          So, I think your argument is: we are not editing text we are editing all kinds of things in a text representation. Which is also what I was trying to say.

                                                                          I think we just disagree about the effectiveness of this approach. I agree that the editors we have are often better than nothing but I wouldn’t advertise vim for it’s ability to edit tabular data using :s. Neither do I think the incantation in your last line is something that I should have to know. I just want a CSS editor and then press the sort button.

                                                                          #editorflamewar2020

                                                                          1. 5

                                                                            So, I think your argument is: we are not editing text we are editing all kinds of things in a text representation.

                                                                            No, my point was that we are all editing text, we just smooth it over so we don’t have to care about the specifics. Text editors do this too, except they provide more power if you wish it. From your comment here and your other comments about this, you seem grossly uneducated about the capabilities of text editors as tools. I’ve linked you articles in another comment – please read them.

                                                                            I just want a CSS editor and then press the sort button.

                                                                            You don’t have to know it.

                                                                            nnoremap <leader> s :%g/{/ .+1,/}/-1 sort
                                                                            

                                                                            My leader key is set to f. So I can just type f s and the document is sorted. In emacs, I can set a mode switch, so that this keybinding is only available for CSS documents.

                                                                            1. 1

                                                                              In emacs, I can set a mode switch, so that this keybinding is only available for CSS documents.

                                                                              FYI, you can do the same in Vim with ftplugins.

                                                                              1. 1

                                                                                No need for anything complex, just use autocmd

                                                                            2. 2

                                                                              You are not expected to know this incantation. It is not a word, it is a sentence. Do you «know» the sentence «Neither do I think the incantation in your last line is something that I should have to know.» ?

                                                                              The reason we prefer to use a single editor with a language to think about editing in [without agreeing which one] is that things that are just out of reach of the functionality supplied by the editor/plugins/etc. are actually within reach if you express them in the slang of the editor.

                                                                              Learning such a language probably doesn’t pay off if handling the things typically represented as text is not an activity taking up a large share of your computer use. And maybe not if you just need five representations and the single-use options available for these representations are good enough from your point of view.

                                                                              But as there are more (and slightly less popular) things to handle, no thanks, I will take a small set of tools I know well and can push one step beyond over sorting through special-case solutions, with many of them missing «trivial» features I have come to depend on.

                                                                          2. 5

                                                                            You don’t want to edit HTML and Java and Latex and ToDos and emails in the same way.

                                                                            Why not? As an Emacs user, I appreciate that different modes interpret concepts such as paragraphs, words, symbols, top level structures in their own appropriate ways, so that keybindings and other commands trivially adapt to the kind of file I’m working with. Sure, not everything fits perfectly into the abstract, primitive categories, but it’s still preferable to having n different editors and work environments for n different problems.

                                                                            1. 1

                                                                              “Why not?”

                                                                              Because having a dedicated editor is more efficient. PyCharm is better for Python and IntelliJ better for Java and Kile better for Latex and Trello better for Todos and Thunderbird better for Mails.

                                                                              The reason you can use Emacs reasonably well for all of those is that it actually tries to be n different editors for n different problems. org-mode barely has anything in common with other modes. Paredit as well, etc…

                                                                              1. 5

                                                                                Because having a dedicated editor is more efficient

                                                                                Having a dedicated editor may be more efficient for a single thing, but most of the projects I work on involve ‘text’ files with at least half a dozen different languages (programming languages, build system scriting, markup languages). If I had to switch between editors for each one then each editor would have to be a lot more efficient to offset the cost of the cognitive load from having different tooling for each file type.

                                                                                1. 3

                                                                                  Well I always feel a lot less productive in IntelliJ editors, and find the Emacs equivalents a lot more comfortable. I guess that’s a difference in attitude, but I think it should be considered as a factor.

                                                                                  The reason you can use Emacs reasonably well for all of those is that it actually tries to be n different editors for n different problems

                                                                                  Major modes are interfaces, of sorts, connecting and implementing the files to existing subsystems (completion-at-point, imenu, xref, …), not their own Editors. Sure, some major modes have more additional keybindints, such as Org mode, but it’s not unrelated: I can still use isearch, avy, highlight-symbol-at-point, etc. or any other function that wasn’t written for a specific mode in mind. Paredit is a minor mode for S-Expression based file formats, so I don’t quite get your point here…

                                                                              2. 4

                                                                                You don’t want to edit HTML and Java and Latex and ToDos and emails in the same way.

                                                                                I most certainly want to do exactly that.

                                                                                1. 1

                                                                                  Nobody edits “text”. And the people who do use Word.

                                                                                  Thanks for making this point clear. I think programmers (usually systems programmers who post to Lobsters or The Orange Site) have basically boxed themselves into a “fake reality” where talking about plain text email and using vi for prose actually matter. I’m basically the only systems programmer on my team (excluding maybe one or two others), and talking to clients (who almost are all non-technical industries) or even other team members - they have big HTML signatures with images (and use formatting in their messages!), reply on top, use IDEs or maybe Notepad++ on Windows. They don’t tweak their window manager or Emacs config, they’re busy whatever line-of-business application.

                                                                                  1. 2

                                                                                    I’m not sure that applies to everyone. I have proselint jacked into vim and I use it frequently. The ability to perform operations on sentences or paragraphs without having to move your hand to the mouse is underappreciated.

                                                                                1. 24

                                                                                  I used to work on complex differential geometry, on families of Calabi-Yau manifolds (which are Kahler manifolds, a special class of Hermitian manifolds whose Chern connection coincides with the Levi-Civita connection of the underlying Riemannian manifold) and the Weil-Peterson metrics defined in part by the Hodge period relations and the Kodaira-Spencer morphism.

                                                                                  As far as I’m concerned, the article makes a good point.

                                                                                  1. 11

                                                                                    I’ve definitely been annoyed at this too. Learning math is really seriously hampered by the useless names of every single concept.

                                                                                    Imagine learning math basic math for the first time, but instead of learning that addition adds things together, you have to learn that the Ossenheimer operator does a particular operation on two operands. That’s essentially how I feel learning math at a university level.

                                                                                    1. 8

                                                                                      By now it’s possible to come up with more descriptive names for many of these things. A Riemannian manifold could be an inner product manifold, versus a normed (Finsler) manifold. The Levi-Civita connection could be the natural connection. The Riemann-Roch theorem maybe the characteristic theorem? Maybe a step in this direction would be to convince authors of new-ish books to include descriptive names in new editions. The arguments over the names could be had on Wikipedia.

                                                                                    2. 3

                                                                                      On the other hand, quasi-polynomial vs. pseudo-polynomial time uses no proper names, but it is also a thing that can only be learned by heart (of course there is also weakly-polynomial time). All the short descriptive names are probably also already used, and sometimes for multiple things in different contexts.

                                                                                      I guess now people can reasonably prioritise what gets the shortest name for things introduced many decades ago, but I have a suspicion that picking names well inside a single decade after introduction of things is just hard.

                                                                                      1. 2

                                                                                        But at least a descriptive name as a little chance of ringing the bell about something known in a close field, or a field related in any matter. Which is useful for mnemonics.

                                                                                        A Last Name, is much more clue-less. I think it is really rare that a Last Name should offer any clue mnemonics for new comers.

                                                                                        Reading the definition from Wikipedia, the reference/reminder to the word polynomial does seem helpful in my taste: from https://en.wikipedia.org/wiki/Quasi-polynomial

                                                                                        “A quasi-polynomial can be written as q ( k ) = c d ( k ) k ^ d + c d − 1 ( k ) k ^ d − 1 + ⋯ + c 0 ( k ) is a periodic function with integral period.”

                                                                                        For me, it resembles the structure of a polynomial in k (degree d), plus with those additional cn(k) coefficient functions terms. So quasi is good name.

                                                                                        Of course, like you said, the difference between Quasi and Pseudo and Weak… is then… well…

                                                                                    1. 3

                                                                                      Single-tenant SaaS software that scales to zero.

                                                                                      The software industry it too geared towards Google-scale. Self-hosted software is often PHP with some database that needs to keep running in the background. Backup is never mentioned in the installation manual.

                                                                                      If I had the time I would:

                                                                                      • Build a new kind of flat-file database that handles streaming updates and syncs to S3.
                                                                                      • Build a suite of tools that run on top of it and can scale to zero when not used.
                                                                                      • Some simple scheduler that is not Kubernetes.
                                                                                      1. 1

                                                                                        I don’t recommend trying to build a database on top of something without transactions and with only eventual consistency.

                                                                                        1. 1

                                                                                          Like a hard disk drive with its own firmware?

                                                                                          1. 1

                                                                                            Hard disk drives should provide immediate read after write consistency of all data. S3 does not.

                                                                                            1. 1

                                                                                              As far as I know, some HDD firmware will buffer & reorder writes for performance reasons; meaning a power outage can (rarely) cause an ext4 “journaled write complete” to get written without the actual content.

                                                                                              1. 2

                                                                                                Well, at least most of them mostly honour write barriers, and at least we have grounds to call drives that lie about barriers lying garbage that they are (no-barrier sequences of writes are fair game to reorder, though). Lying is an important part here, of course. With S3 the normal mode of operation is officially expected to have temporary inconsistencies even in the best case, which is fine for many use cases, but maybe even more annoying than the modern hard drive behaviour in this specific one.

                                                                                                1. 1

                                                                                                  That may be, I have no idea. I’ve definitely read that writing a database backend on modern file systems and drives is a nightmare.

                                                                                                  On S3, you wouldn’t even need a power outage in order cause consistency issues, though. Hence why I suggest not trying write a database that stores data in it. It’s really not designed for that.

                                                                                        1. 6

                                                                                          Application scripting for UNIX.

                                                                                          What I want is the ability to treat application components like building blocks that I can address, control, and most importantly string together with a common data interchange between them, allowing me to compose complex customized workflows.

                                                                                          The Amiga did it with AREXX, Apple does it with the Open Scripting Architecture and AppleEvents, and Windows does it with Powershell and its several other more ancient mechanisms like OLE and even DDE.

                                                                                          But UNIX folks get this blank look when I try to talk about this and inevitably come back with “Uh. Pipelines?”.

                                                                                          Pipelines are amazingly powerful and I’ve built my career on UNIX so I’ll be one of the first to gush about the power of the “everything is a string of bytes” philosophy, but there are some things that are very hard to express with that one simple data structure.

                                                                                          1. 2

                                                                                            How far does D-Bus go towards what you’re looking for?

                                                                                            1. 1

                                                                                              D-Bus looks like it would handle the message passing bits. It’s not clear to me how that would handle the whole idea of applications exporting composable verbs though.

                                                                                              1. 2

                                                                                                Well, D-Bus seems to have a notion of providing a service, and some built-in mechanisms for access control; and it does look that some applications declares D-Bus endpoints for communication between parts of the application.

                                                                                                It might be that D-Bus is easier to wrap for quick scripts than preceding (somewhat comparable to DDE) KDE DCOP, CORBA and Gnome Bonobo on top of it, and KParts.

                                                                                                1. 1

                                                                                                  Thanks I’ll dig into it more.

                                                                                                  I do like that there are bindings for every language under the sun.

                                                                                          1. 1

                                                                                            Some sort of native widgets library that actually works cross-platform (GTK, Qt, Cocoa, Windows), works well, and is still maintained. Electron doesn’t count.

                                                                                            1. 2

                                                                                              LCL might be the closest… (Lazarus Component Library, a part of Lazarus IDE for Free Pascal Compiler)

                                                                                              1. 1

                                                                                                I’m not super familiar with LCL (or Pascal for that matter), but this does look similar to what I’m looking for. I’ve also seen libui thrown out there, but last I heard, it was in maintenance mode and not very complete.

                                                                                                1. 2

                                                                                                  Well, Pascal is very readable, and FPC dialect includes the modern conveniences of imperative / object oriented programming with some basic generics support, and C-like FFI is literally just a declaration of a function + name of the implementing library.

                                                                                                  So even if you do not want to write the entire application in Pascal, you can just write the immediate GUI-handling code in Pascal (LCL uses a class hierarchy, so wrapping it is not a completely trivial task) and FFI the real logic.

                                                                                                  I would say LCL has quite a nice library of UI elements; and there are some third-party components, too.

                                                                                            1. 16

                                                                                              Something actually good for photo management and editing..

                                                                                              • RAW processing must be done on the GPU, as in vkdt, but like, write it in Rust, using wgpu or something. There is a raw loader in Rust already, use it
                                                                                              • don’t use imgui type things for UI noooooo just use GTK please and make it look nice and simple and GNOME-ish
                                                                                              • what is infuriating about Lightroom and every clone is that they treat exports as fire-and-forget. If you browse the library, it re-renders from RAW all the time, maybe using some kind of cache (badly). I do want to manage the JPEGs! In fact I want to see the JPEGs most of the time but if RAW exists for a photo I want a “redevelop” button to exist of course. And the discovery of the RAW origin of the JPEG must be really “bulletproof”, no matter how I move stuff around the FS as long as it’s below the directories the software knows about.
                                                                                                • conversely, software like digiKam that aims to organize all the things is usually not great at RAW.
                                                                                              • why does everything suck over NFS. I store photos in NFS shares, please take it into account and access everything optimally. Don’t mmap the photos. Don’t use SQLite databases that don’t work over NFS. Argh.
                                                                                              1. 4

                                                                                                All the putative Lightroom replacements are terrible. I would happily pay what I pay to Adobe to literally anyone else for software that did the 60% of what Lightroom does that I use.

                                                                                                1. 1

                                                                                                  Can you expand on the things in Lightroom you find most useful?

                                                                                                  1. 2

                                                                                                    Organizating, developing, importing and exporting. And I don’t do that much developing in Lightroom, but I do use Photoshop, which opens a whole other kettle of fish.

                                                                                                  2. 1

                                                                                                    Do you / others hate capture one? Seemed pretty good from my limited use but not mentioned in any of these replies.

                                                                                                  3. 3

                                                                                                    This is not the answer you want, but

                                                                                                    why does everything suck over NFS

                                                                                                    … is because NFS itself sucks.

                                                                                                    1. 2

                                                                                                      why does everything suck over NFS. I store photos in NFS shares, please take it into account and access everything optimally. Don’t mmap the photos. Don’t use SQLite databases that don’t work over NFS. Argh.

                                                                                                      I feel your pain!

                                                                                                      I’ve been continually disappointed at how poorly many Linux apps perform when run on an NFS file share.

                                                                                                      Also, I do not speak for my employer, but I work for the AWS EFS team and my service presents itself as an NFS file share, so we see a fair bit of customer pain around this as well.

                                                                                                      It surprises me how little innovation I see in the remote filesystem space these days given that we have pervasive gig speed networking growing on trees and computers so fast that the processing load of the NFS protocol is largely inconsequential for many use cases.

                                                                                                      1. 2

                                                                                                        I work in the data space and everything is moving to “the cloud” and that typically means object stores. People have wasted too much money on things like HDFS, they just want to store files somewhere and not have to think about it. (The pain that these are not really file systems is largely ignored)

                                                                                                        1. 1

                                                                                                          Yeah it sometimes surprises people how many use case really work well when implemented on a file system, especially one that has reasonable capabilities for locking and the like.

                                                                                                          That’s true everywhere from the back end where people are storing raw seething data all the way up to the consumer user experience where Apple tried DESPERATELY for the first decade of its life to hide the fact that there was a UNIX-ish userland behind the curtain with a bog standard traditional filesystem, and even they’ve gone back on that by providing their “Files” app and interface in recent releases.

                                                                                                          Files are just an incredibly useful way to think about data from just about every angle. Certainly not THE ONLY way or THE BEST way because such descriptors are pointless when talking about abstractions.

                                                                                                          1. 2

                                                                                                            In a sense, files are a reasonable (of course almost nothing is perfect, and files are not) implementation of a core and almost unavoidable notion of compartmentalisation, or a Bunch Of Stuff, together with the clearly desirable idea of using various tools on the same Bunch Of Stuff… Hard to avoid that completely!

                                                                                                      2. 1

                                                                                                        Second on every LightRoom clone being… not great. Sadly I’ve stuck with actually paying for LightRoom, but I would gladly pay $80+ one time for an adequate replacement.

                                                                                                        1. 1

                                                                                                          No, my complaints apply to Lightroom itself too — at least back when I used it, export worked exactly the same way there.

                                                                                                          I actually like the editing part of RawTherapee more than Lightroom :P

                                                                                                          1. 1

                                                                                                            I’m just getting started. The auto button is much better in LightRoom :’)

                                                                                                        2. 1

                                                                                                          I do want to manage the JPEGs! In fact I want to see the JPEGs most of the time but if RAW exists for a photo I want a “redevelop” button to exist of course

                                                                                                          You’ve probably tried it, and it has its own warts, but digikam does track the jpeg and allows you to re-import raw images. Just letting you know if you haven’t tried it before :)

                                                                                                          1. 1

                                                                                                            Have you seen Darktable? I think it covers most of your bases.

                                                                                                            1. 1

                                                                                                              Of course. The remarks about Lightroom and its clones definitely apply. Also its GPU support is incomplete and based on OpenCL – with some advanced usage of OpenCL that’s not supported by Mesa Clover (the “images” feature especially).

                                                                                                          1. 1
                                                                                                            • a serious graph file system, ideally on NFS. Eg, I want to CD into the same folder from many locations. I know perhaps something similar can be built via (Sym)Links but i feel they just aren’t the same.

                                                                                                            • An event pipeline of all events, in my life and in the world. I want to correlate wake up times with external temperature and news and school closings, etc etc

                                                                                                            • a whiteboard software that is actually similar to the real thing

                                                                                                            • a graph architectural decision tree that shows selections and alternatives and trade offs and allows to compute quantities across traversals

                                                                                                            • something like a “Kirchhoff circuit laws” builder that computes maximum theoretical uptime/latency for distributed architectures

                                                                                                            1. 1

                                                                                                              Re: graph file system — what do you really want from it? After all, symlinks are cool… Of course, there is this issue of reachability and garbage collection otherwise.

                                                                                                              If you just want a graph — maybe have an mkdir wrapper that creates uniquely named directories in a stash, and the name you give is immediately the name of a symlink, maybe that symmetry would help?

                                                                                                              (I kind of have something remotely similar with a query-based filesystem, but there graph structure is irrelevant and queries to stuff stored e.g. in SQL are the focus, so I cannot easily interpolate what you want…)

                                                                                                              1. 1

                                                                                                                I’m sure it’s a terrible idea, just thinking about permissions makes my head spin. In part I’d be curious in the academics of it, on the other side we already have a lot of linking going around so why not go bold with it and make it a first class thing ? Perhaps edges can have properties too..

                                                                                                                1. 1

                                                                                                                  Well, symlinks just apply to directories the logic already applied to files. There are things-stored (inodes), they have permissions. There are navigational links (hardlinks for files, symlinks for directories), they have names and locations. The reason first-class indistinguishable-from-first hardlinks for directories are not widely used is reachability: for files it is enough to count references, for directories you need a true GC to handle unreachable loops.

                                                                                                                  So if you just do that store-directories-separately-and-symlink, the permissions applied to the real targets would work just fine.

                                                                                                                  If you want edge attributes and stuff like that, then I guess you need to start by finding a graph database you really like w.r.t. its data model, then specify the FS representation that that could actually work with unaware tools, then it is a question of a virtual FS for browsing such a DB. But graph DB comes first in this case.

                                                                                                            1. 3

                                                                                                              I am not saying my dreams are widely shared, or good projects to take up… but I will answer the questions as stated.

                                                                                                              Like spreadsheet, only to data-block-first. Multidimensional arrays come first, then they are layed out to show them best (unlike spreadsheets, where huge 2D sheet is primary, then arrays are kind of clumsily specified). Of course the ranges are also named; operations are likely to be a mix of how spreadsheets work nowadays, how normal code is written in Julia/Python/R/… and some things close to APL/J. No idea whether this can be made more useful (for someone) than just the existing structured-iteration libraries, maybe with a bit better output/visualisation code…

                                                                                                              A DVCS that does not regress compared to Subversion. I want shallow (last month) and narrow (just this directory) checkouts supported on the level that the workflow that makes sense is just versioning entire $HOME and then sometimes extracting a subset as a project to push. Although no idea if the next iteration of Pijul will approach that.

                                                                                                              A hackable 2D game with proper orbital mechanics take-off-to-landing (including aerodynamic flight with a possibility of stalling before landing etc.). Orbiter definitely does more than I want, but for me a 2D version would feel a nice more casual thing. And probably 2D has better chances of not needing Wine…

                                                                                                              Writers have tools for sketching out and reshuffling the story; for proofs and for code documentation there is more weight on the notion of what depends on what; and sometimes one can reverse the dependency, or replace with a forward declaration; sketching and experimenting around all that can probably be aided by some kind of a tool, but no idea how it would look like. I guess it would have something in common with Tufts VUE…

                                                                                                              1. 3

                                                                                                                A DVCS that does not regress compared to Subversion. I want shallow (last month) and narrow (just this directory) checkouts supported on the level that the workflow that makes sense is just versioning entire $HOME and then sometimes extracting a subset as a project to push

                                                                                                                git can technically do this (using worktrees, subtrees, sparse checkouts etc.) - but the UI for it … does not exist. It seems like a low-hanging fruit to implement this (and one which some friends with whom I collaborate on monorepo tooling may end up picking at some point).

                                                                                                                1. 2

                                                                                                                  The thing that git fails completely on data-model level, is that it insists a branch is a pointer. In fact it is more of a property of a commit, which leads to much much better handling of history, and as a curious (but convenient) implication also brings possibility of multiple local heads for a single branch…

                                                                                                                  Of course all-$HOME versioning is likely to benefit from a more careful approach to branches, and maybe treating not just content but also changes as more hierarchical structures with possibility to swap a subtree of changes in place, but I really do not believe in anything starting from git here…

                                                                                                                2. 2

                                                                                                                  Your spreadsheet concept basically already exists in Apple Numbers. Spreadsheets there don’t take up the whole page but instead are placed individually as a subset of the page.

                                                                                                                  To your point on DVCS, there are big companies that do have this kind of thing available, but I’m not sure how much of it is open-sourced.

                                                                                                                  1. 3

                                                                                                                    Thanks!

                                                                                                                    Re: Apple Numbers: Hm, interesting (not interesting enough to touch macOS, but I should look up whether they support more dimensions in all that etc.). Although I would expect the background computational logic to be annoyingly restrictive, but that could be independent of the layout.

                                                                                                                    Re: DVCS: what I hear is very restrictive actually, more about how to handle an effectively-monorepo without paying the worst-case performance cost than something thinking in terms of how to structure the workflow to be able to extract a natural subproject as a separate project retroactively.

                                                                                                                  2. 1

                                                                                                                    As to the first and last points, maybe https://luna-lang.org would be interesting to you? (I am a huge fanboi of them.)

                                                                                                                    1. 1

                                                                                                                      One more data flow language?

                                                                                                                      I mean, data flows are cool, sure, but I am fine writing them in one of the ton of ways in text, though.

                                                                                                                      They don’t solve the data entry + presentation issue per se (layout of computation structure and layout of a data set are different issues), and structuring a proof looks way out of scope for such a tool.

                                                                                                                      ETA: of course a data flow language well done is cool (and any laguage paradigm well done is cool), I just don’t have a use case.

                                                                                                                      1. 1

                                                                                                                        With Luna the idea is that you can write in text if you want, then jump to graphical instantly and tweak, then jump back to text, etc. with no loss of information.

                                                                                                                        As to the rest, I guess I don’t know the domains well enough to really grasp your needs & pain points :) just wanted to share FWIW, in case it could get you interested. Cheers!

                                                                                                                        1. 1

                                                                                                                          Sure, I understood that capability to switch between representations losslessly, I just need a reason to do significant mouse-focused work (which, indeed, is not said anywhere in my comment) so using this capability would always be a net loss for me personally.

                                                                                                                  1. 6

                                                                                                                    This is more than just software, but I’d love a scanner on my fridge/pantry that I could scan all my food into.

                                                                                                                    Then I could see what is in the fridge, and, more importantly, what’s about to go bad, without looking through it.

                                                                                                                    It’d also make making a grocery list a snap, since a big chunk of my food is staples.

                                                                                                                    1. 2

                                                                                                                      Does this mean a check-in/check-out system? I guess for the scanning part nobody can help you with physical setup… But you can attach an Android smartphone with Binary Eye or something, scan everything incoming, and enable «forward all scan data to URL» with whatever you have around to receive and collect the data.

                                                                                                                      I guess you could scan receipt before and after each batch of bought things to show these are incoming, and have a different marker to scan with things running out.

                                                                                                                      Sounds like the receiver might be a reasonably simple script pushing everything into an SQL database — or doing nothing, if you prefer parsing the logs. Maybe having webserver logs with data would make getting around to actual processing easier…

                                                                                                                      (of course, good luck with loose fruit here)

                                                                                                                      1. 1

                                                                                                                        Yes, check in check out. I wouldn’t mind doing the scanning, frankly. I guess I would have to scan things going out.

                                                                                                                        Yes, loose fruit or cooked items would be problematic.

                                                                                                                        1. 2

                                                                                                                          Then maybe indeed install Binary Eye and start scanning? Once you have some data, the barrier of entry to actually processing it will become lower… (and even if unprocessed data doesn’t help you find expiring items, it will later help you estimate the range of consumption rates of various items)

                                                                                                                          Cooked items are kind of less of a problem, as once you have a barcode for each rought type (which can be Data Matrix or something — yay multiformat scanning), the overhead of check-in/check-out is not large compared to cooking. I guess for fruit you could check-in each batch…

                                                                                                                      2. 2
                                                                                                                        1. 1

                                                                                                                          Oooh, thanks!

                                                                                                                      1. 6
                                                                                                                        1. Less bloated and thought out alternative to Vim.

                                                                                                                        There are a few, but all of them for some reason choose to leave the same key-mappings, even when they make little sense. I think a lot of Vim defaults are there because of backwards compatibility. Kakoune would have been nice, except they messed up the workflow by going with the selection-first approach.

                                                                                                                        1. File annotation tool.

                                                                                                                        I am not sure what form this should take, but often I want to write notes about various pdf files I am reading and store the pdf and notes in the same place. There is papis but it does a bit too much in my opinion, and is more for storing meta-data (which is also important) instead of actual notes.

                                                                                                                        1. Terminal based email client.

                                                                                                                        There are a few, but they are a bit too complicated. mutt for example is designed to work with various other tools that you have to set up first. And then you have to set up mime extension handlings, and you need yet another software to hold your contacts in. Some simple (from users perspective) alternative would be nice in my opinion, even if less powerful.

                                                                                                                        1. A git-like tool (or a git like interface) to replace make

                                                                                                                        Right now with Make you have to declare dependencies between scripts within the Make file. I am not sure if possible, but would be nice to have a separate tool that handles dependencies. In this vision you would simply have some scripts that execute. The tool will then save dates about when is the last time the script was executed. And in addition would allow to declare dependencies via the command line (like tool add script1 script2). And of course other commands to display the DAG, list targets that are out of date, etc.

                                                                                                                        1. 4

                                                                                                                          Kakoune would have been nice, except they messed up the workflow by going with the selection-first approach.

                                                                                                                          Can you elaborate? What’s the downside to this?

                                                                                                                          1. 5

                                                                                                                            There is this nice write-up that reflects my experience pretty well, so if you don’t mind I will just link to it: https://github.com/noctuid/dotfiles/blob/master/emacs/editing.org#why-not-kakoune

                                                                                                                          2. 3

                                                                                                                            Re: 2: I think if you say the existing tools do too much, it would be interesting if you explained why having filename.pdf.txt with notes is doing too little.

                                                                                                                            Re: 4: Hm, I am not sure, if two different scripts modify some file, how is this handled from the point of view of the file’s staleness (then it turns out that the file is a log file so the operations are not even idempotent, but that surely needs special-casing)?

                                                                                                                            1. 1

                                                                                                                              Re 2: filename.pdf.txt is slightly too little in terms of organisation. It is similar to what I am doing now (I have two files, one for notes and another one for metadata besides pdf). The problems for me start when I start adding some fields (lines really) in notes or meta data. Then older files have missing information and when I grep for something I am not sure if some results are not returned because they didn’t match, or simply because I forgot to add that specific type of information.

                                                                                                                              I guess a template with standardised fields would be enough. I am not too sure on the specifics. All I know is that my current approach is a bit clunky. And papis seemed overkill and not-enough at the same time. I suppose one part of creating new software is figuring out details like that.

                                                                                                                              Re 4: In case of a log file I guess you would write to it any time the script is executed. In that case IMO there is no need to add a dependency in the system at all. Whenever something is rebuilt the log will be appended. But probably do not need to state to execute some script if log is updated.

                                                                                                                              If two scripts write to the same output (i.e. append lines one after the other) then it might be tricky. I haven’t solved all the cases in my head, just wondering if it’s feasible or not. But I guess maybe you can introduce something here, like not declaring that output file to be out-of-date until the whole pipeline of a re-run is finished?

                                                                                                                              1. 1

                                                                                                                                Re: missing fields — template indeed won’t save you as it gets updated, maybe you need a pass that would check what fields from the current template are missing in the old metadata files?

                                                                                                                                Re: dependencies: I think the system should discover such dependency, no? Otherwise it’s just a CLI to edit a Makefile… And so the question is what it will discover for multiple non-idempotent scripts modifying the same file (but let’s say the user doesn’t add an ignore because semantically there is idempotence)

                                                                                                                              1. 2

                                                                                                                                Terminal based email client.

                                                                                                                                I think aerc might be a good fit.

                                                                                                                              1. 5

                                                                                                                                As a feature of desktop enviroments: Focus follows mind.

                                                                                                                                1. 3

                                                                                                                                  2: A web browser that:

                                                                                                                                  • Supports only basic HTML and no CSS
                                                                                                                                  • Allows me to use my own stylesheet so all pages are readable for me
                                                                                                                                  • Does the equivalent of the ‘readability’ plugins on every page on the web, to strip out the fluff.
                                                                                                                                  1. 3

                                                                                                                                    3: A hard-realtime UI that is allowed to make you wait for things, but only where it actually makes sense. Nothing’s allowed to run in the background and affect latency in your text editor / shell / window management / whatever.

                                                                                                                                    1. 1

                                                                                                                                      I am afraid that applying a readability-equivalent is not so straightforward…

                                                                                                                                      I am consuming most of the web content via a pipeline of: parse HTML → make a Readability-lite copy and original copy → HTML-to-text in a specific way I have chosen for my personal comfort. So I am not incredibly far from living in the world you want. In some cases the readability-lite copy is a nice help, but in many many cases it is a complete failure, and also it is clear that it failed at a choice that is actually hard.

                                                                                                                                      As a very primitive example, on some pages collapsing the comment-related fluff is the first thing to do, and on some others it’s the real value of the page.

                                                                                                                                  1. 41

                                                                                                                                    An independent web browser that isn’t based on Google-funded code and has full keyboard control.

                                                                                                                                    1. 6

                                                                                                                                      While its not a single platform, you might interested in tridactyl. Its a firefox extension, some of its greatest hits:

                                                                                                                                      • Vim style keybinds (link navigation. element selection, scrolling, tab/buffer switching)
                                                                                                                                      • Allows integration with the underlying system using a native messenger. You can send a youtube video to mpv, or pass in a region of text to an text to speach engine.
                                                                                                                                      • Keybinds are user definable and can be composed. E.g. do x then y pipe that to z.
                                                                                                                                      • Ever want to edit a text block (like this) in the editor of your choice? Just hit ctrl + i
                                                                                                                                      • custom color themes
                                                                                                                                      • Has a scriptable way to define new functions, albeit a little messy. e.g.
                                                                                                                                        alias tabsort jsb browser.tabs.query({}).then(tabs => tabs.sort((t1, t2) => t1.url.localeCompare(t2.url)).forEach((tab, index) => browser.tabs.move(tab.id, {index})))
                                                                                                                                        will define an alias for tabsort that, well sorts tabs by domain name.

                                                                                                                                      I’m not related to the project, but I do sing its praised every change I get.

                                                                                                                                      1. 1

                                                                                                                                        Thanks; I’ve heard of this but A) I don’t use vim or want to learn it and B) it runs on a browser whose rendering engine just had its entire team get fired and C) it’s also a google-funded browser.

                                                                                                                                      2. 5

                                                                                                                                        Your wording allows currently Apple-funded WebKit (and I think there are some WebKit wrappers that qualify already), is it intentional or not?

                                                                                                                                        1. 2

                                                                                                                                          Given that webkit was the original rendering engine for Chrome I would not count it as being independent, no.

                                                                                                                                          I mean, I still use it, but I would prefer to have a healthy selection of engines rather than just a bunch of Chrome descendants.

                                                                                                                                          1. 8

                                                                                                                                            Technically, Google did not do any work on WebKit, it just added V8, then later forked the thing. So it’s all descendants of KHTML → WebKit, with Google being of no use for WebKit proper. And Gecko, which I guess can also plausibly be called Google-funded…

                                                                                                                                            [the problem, of course, that with people saying «Living Standard» without noticing it is an oxymoron, any browser will either have large compatibility issues, even if the good side of the Web is viewable even in Links2, or be a horrible mess because it chases a moving target that moves too fast to have reflection on consistent design]

                                                                                                                                        2. 4

                                                                                                                                          qutebrowser

                                                                                                                                          It was about a 3-day learning curve for me, but I’ve loved it ever since.

                                                                                                                                          Full keyboard control, but some things you can’t do with the mouse :)

                                                                                                                                          1. 4

                                                                                                                                            Qt WebEngine, which is what Qutebrowser runs on, is essentially just Chrome’s layout engine. Nearly everything is Chome nowadays.

                                                                                                                                            1. 1

                                                                                                                                              You’re right about the layout engine, but it’s much better than Chrome all-around. No phoning home, built-in adblock, respect for keyboard user.

                                                                                                                                              1. 1

                                                                                                                                                It can also run on QtWebKit, but I think they’re going to phase that out, as it’s quite outdated.

                                                                                                                                                https://github.com/qutebrowser/qutebrowser/issues/4039

                                                                                                                                                1. 2

                                                                                                                                                  I’m still not sure what to do about QtWebKit support - right now, I’m still waiting for something to happen (ideally a new QtWebKit release rebased on a newer upstream WebKit) given that it’s still in active (even though slow) development: https://github.com/qtwebkit/qtwebkit/commits/qtwebkit-dev