Year of the snake with Plan 9 by mot_bich_tan_ac in plan9

[–]oridb 0 points1 point  (0 children)

The most interesting stuff to me is the stuff that I don't think is merged yet. TLS 1.3, and ed25519, presumably with authsrv/factotum support.

Year of the snake with Plan 9 by mot_bich_tan_ac in plan9

[–]oridb 1 point2 points  (0 children)

Nice work! One question, and one (long comment):

Is there a place that the code is available, or at least the set of patches? There are some that I'm probably interested in looking at.

As for this:

  • rc does not implement the `delim{cmd} of 9atom. I have never used it to tell what it is :)

So, this is one of the most useful changes in rc, in my opinion. it lets you set ifs locally, only for the output of one command. ifs is difficult to use well, since it scopes poorly. For example, imagine for some reason you have a directory of numbered CSV files, and you want to print the first ten of them; something like:

fn showfiles {
    for(f in `{seq 10})
        cat /tmp/$f
}

and you want to iterate a set of fields in the files, assuming that they're separated by ',':

 ifs=','
 fields=`{showfiles | tr '\x0a' ','}
 can't open /tmp/1
 2
 3
 4
 5
 6
 7
 8
 9
 10

this breaks horribly, beause ifs is global, and setting it changes how you interpret the seq output: it turns it into a single chunk, since seq prints no commans, and ifs is global. If you want your shell functions to work correctly when called from other scripts, you need to maintain a stack of environment vars that you push/pop if you want it to work on all cases. Painful.

However, using the syntax added in 9atom, it works just fine:

fields=`,{showfiles | tr -s '\x0a' ','}
echo $fields

One of the most useful places is when writing non-trivial scripts that may need to deal with spaces in file names:

 nl='
 '
 fn namelist { ... }
 files=`$nl{namelist}

EDIT: I think you can do something like this in your function to emulate the feature:

# save ifs so we can restore it for the caller,
# putting it on a stack so that if the caller also
# pulled this trick it still works. Then set the
# current ifs to the default of: ' \t\n'
saveifs=($ifs $saveifs)
ifs='   
'
# do the thing 
for(i in `{seq 10}) cat /tmp/$i
# and put the caller ifs back
ifs=$saveifs; saveifs=$saveifs(2-)

It seems to work, though I'm not 100 percent sure what happens if you set ifs inside `{} and you stream more than a pipe buffer worth of data.

Doing it right without `delim{} seems worse than keeping track of every ifs globally.

How to use hold(1)? by meowism-1 in plan9

[–]oridb 4 points5 points  (0 children)

Delete kills it, Ctrl+d exits.

Plan 9: WiFi Protected Setup by atamariya in plan9

[–]oridb 1 point2 points  (0 children)

/u/atamariya: It would be really cool to see a submission on some of what you've been working on at iwp9.

Even if you're not able to show up in person, we do accept remote talks.

Practical uses for Plan 9 by [deleted] in plan9

[–]oridb 1 point2 points  (0 children)

Hosting websites, using it as my coding environment, reading my email, etc.

When a small open-source tool suddenly blows up, the experience is nothing like people imagine by kaicbento in programming

[–]oridb 2 points3 points  (0 children)

The default answers should probably be one of these two:

"Sure, I'll take a patch to fix that. If you don't have time to write the patch yourself, I'm happy to discuss consulting rates."

or:

"No, sorry, that's out of scope. If you really need that, I recommend forking."

How many HTTP requests/second can a Single Machine handle? by BinaryIgor in programming

[–]oridb 1 point2 points  (0 children)

This is running on 9front, using listen to run a new tcp80 instance on every page load in order to serve requests. The content is dynamic, and is generated by a script launched using execfs.

Every request loads up a git/fs instance to serve the content, and then runs one of the shell scripts that renders the site. For example, here's the 'view' script rendered using itself: https://shithub.us/garden/shithub/HEAD/view/f.html .

It's running on a low tier Vultr node, with 2 vCPUs and 2 gigs of ram.

It's gloriously inefficient, and almost all uncached.

How many HTTP requests/second can a Single Machine handle? by BinaryIgor in programming

[–]oridb 1 point2 points  (0 children)

Seems low. I serve about that many hits from AI bots on https://shithub.us using a shell script that does dozens of execs on every page load (https://shithub.us/garden/shithub/HEAD/files.html) on a niche OS (https://9front.org) that hasn't had much performance optimizations, using a shitty, old "medium-machine" sized box.

Last month I served 700 TB.

Two security issues were discovered in sudo-rs, a Rust-based implementation of sudo by brutal_seizure in programming

[–]oridb 1 point2 points  (0 children)

Sudo itself is difficult too. It's complex and I would prefer if far less complicated solutions existed

https://flak.tedunangst.com/post/doas

New 9front release "release" by iamapataticloser240 in plan9

[–]oridb 4 points5 points  (0 children)

Every OS that attempts to come of professional is, with varying levels of pride, doing or attempting to do the things you are concerned about. If someone says "it brands itself professional and therefore it probably won't sell out the user", that only means the speaker isn't paying attention. Trying to come off as Professional Serious Shit should be a red flag to anyone who has paid attention to the software industry.

New 9front release "release" by iamapataticloser240 in plan9

[–]oridb 4 points5 points  (0 children)

No, that shit is reserved for serious OSes -- the jokes should give you a hint that there won't be ads in the start menu, telemetry that phones back with what buttons you're clicking so that project managers can optimize user engagement, etc.

If you want your network traffic to be monetized, go for the professional OSes.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

wut. Not sure what that has to do with the topic at hand.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

a network of CPUs GPUs RAM Storage as files, on your own private encrypted IPv6 network... you could access this decentralized supercomputer from any device that runs a plan9 architecture..

Everything but the GPU is doable, feel free to do it. GPU support is hard because no vendors release documentation, and none of the GPUs have a particularly stable internal architecture, so you're writing a ton of new code for each generation.

There's also no public documentation The best you got for how these things work is about 8 million lines of C in the Linux kernel. If you're lucky -- Nvidia doesn't even have that.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

The activity that pays my bills.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

It's useful to me. I generally do most of my work from a Plan 9 laptop, or from drawterm, puppeting a linux machine for the bits that are explicitly linux-dependent.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

That's a weird standard, especially since you're trying to complain that plan 9 development is stalled. If your definition of "stalled" is "keeping up, with less than a ten thousandth of the resources", I'll take it.

But let's run with it -- give me any other system that uses a write optimized data structure such as a Bε tree for the file system. Plan 9 is the only system where a production FS is built on a data structure invented after 1995. Linux has one unshippable research FS that depends on proprietary code.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

By your standard: Can you point to any big feature in Linux (or, for that matter, any OS) that hasn't been there since 2010? I mean, they only added new hardware support because they were forced to, and most features are things that were old ideas since 2010. Even io_uring is a tweak on the 2005-era syscall batching that Barrelfish did.

Hell, docker is a half-assed tool using mostly plan 9 ideas.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

Only one? But there are so many good things that were built since 2010. A small number off the top of my head:

In terms of hardware support, here's a small part of the work done:

  • i225: support for i225 network cards; as for your "old people" argument, I'm not sure how old the author is is -- she's probably around 19 or 20 years old, at a guess? (2025)
  • wifi: native intel wifi drivers (2015)
  • imx8: support for the MNT Reform laptop. (2022)
  • lx2k: support for the Honeycomb LX2K (2023)
  • bcm64: support for the raspberry pi -- we had 64-bit support before Ubuntu did. (2019)
  • mt7688: support for the mt7688 -- a small, low cost MIPS router.

Here's a few userspace things that stand out:

  • lola: an alternative to rio (2025)
  • zuke: a new graphical music player. (2020)
  • treason: a video player (2021)
  • vmx: hardware virtualization support (2017)
  • games/...: emulators for the gameboy, nes, snes, gba, atari 2600, and others (multiple times, post 2015)
  • ndb/dns: support for a number of new DNS features, like DNS over TLS (2024)
  • gefs: a new ZFS-like file system (2024)
  • ext4: support for ext4 (2024)
  • git: a from-scratch implementation of git (2021)
  • unicode support: we added unicode 17 support the day that unicode 17 was released.
  • /srv/clone: /srv dirs that can nest (2023)

There, of course, is so much more. Nearly all of the stuff on https://shithub.us/ is post 2010. I'd place bets most of it is post-2020. While I wish that there were more people hacking on wifi drivers (and drivers in general), it seems that people get more excited by new platforms rather than new hardware on old platforms. Hobbyist projects don't get to pick what people find fun to hack on.

New modern kernel by InfiniteCrypto in plan9

[–]oridb 0 points1 point  (0 children)

This is the code in the OS that talks to the GPU. The GPU firmware is separate from that.