What would you like to see over the next few FreeBSD versions?

There's fstyp(8) for echoing filesystems used by partitions, though this is on the command line, and not within the boot configuration program. Is blkid much different in function?

Also, you can label partitions, so that you don't have to know the written out default device name, as you can use the label instead, which is also a device. A user here wrote how to use labels: http://www.wonkity.com/~wblock/docs/html/
Not working. fstyp does not show uuid
fstyp -l -s -u /dev/ada0s3a
ufs
 
Here is an idea. I don't know whether it is a good idea. In a nutshell, it amount to turning FreeBSD into a research operating system, and try out whether some of the design principles of Unix can be completely overthrown, but do so in a compatible fashion.

One example: Since the first day of Unix, the way command line parsing was handled was super simple. The shell knows how to glob (expand * and ?), and that's all it knows. Otherwise, the shell has no knowledge whatsoever what all the string arguments a program consumes mean. This is one of the reasons that autocomplete works so badly, and requires so many setup files to get it to work half-decently. For example, "ls foo<tab>" tries to autocomplete all possible file names that start with foo, which happens to be the correct functionality. On the other hand, "ping foo<tab>" does the same thing, but the shell doesn't know that ping's first argument is not a local file, but a node name. And when you get into options, parsing and autocomplete go complete haywire: "ls -<tab>" will not try to autocomplete all possible options; much less will it give help on what options might be available. That is, unless there are files in the current directory whose names start with "-", in which case the result will be very much not what the user intended. The extreme example is is: If you create a file named "-Rf" in your current directory, then "rm *" becomes insanely dangerous. That's because the rm program does not have any clue that the first argument "-Rf" was actually a file name that resulted from a glob, not an option. Finally, there is no help available at the command line, without actually running the executable. It is impossible to implement a special character (such as Control-?) that would ask a program from the command line: "what input would be valid here" or "what does this argument or option mean".

So here is my rough proposal: Change all CLI programs that ship with the FreeBSD base to use a standardized command line parser. One that understands the differences between options and arguments, knows the domain of arguments for autocomplete, help and globbing (so "ping *" pings all hosts on the local network, instead of trying to ping all file names), has a built-in standardized help facility with good i18n support. One way of implementing this is to change the task of "executing" a program to grow the ability for the shell to peek into the command line parser of each program executable file, just like a shared library can be read on the fly. It could also be implemented by using the main() of the program in a coroutine fashion. Clearly, the current ABI of "main(int argc, char* argv[])" would have to change, while the current ABI would need to be supported for existing code.

There is precedent for this: VMS had a standardized options/argument parser. That's why all VMS programs are so consistent in their use of options and arguments, whether supplied by Digital or by the open source community: once it becomes easier to just use the OS's default parser, everyone does it, and programs automatically run consistently. And because complexity (such as options that only apply to a subset of arguments) could be written just once (in the standardized parser) and then amortized, it was possible to improve the syntax and semantics of command line parsing in new versions, without having to rewrite lots of code.

Great, once we have that done, do the next step: Decide on which shell is the best one to use, and make that shell callable as a library. In a nutshell (pun!), the shell becomes a data-driven library with a standardized API, and the thing we normally use at the command line is just one version, where the "data" it is driven from s the set of all program (executables) on the path. Now programs that use a command line internally (such as debuggers) don't have to write their own command parsing and decoding any longer. The GNU readline library is a small step in this direction, but what it is lacking is shell functionality such as variables, quoting, loops, if statements, and so on. I think we would start seeing a whole new set of CLI-driven utilities for things like network management, log analysis, root cause analysis, and so on.

After a few years, this could be transmutated into new ways of writing RPC mechanisms and protocols, by making the data that describes a program's options parsing and interaction with the shell, and its internal mechanisms available over the network. Think of it as CORBA and EJB (Enterprise JavaBeans), but on steroids and tied into basic OS operation.

There are many other possible examples. One is to get rid of today's file system (POSIX) interface, completely. Move to immutable objects, without names (internally using OIDs), and a catalog system based on a KV store, which among many other things allows finding objects and their OIDs. Find ways to do aggregation of objects to efficiently handle tasks as "many related objects" (today we have directories for that), "an object that exists in multiple contexts" (to replace hard- and soft-links), and "an object that can get appended to" (for today's logs). This immediately leads to the concept of named files having versions, which many OSes had, but Unix forgot to implement. This idea is very powerful if one combines it with a transactional updates to create a new object from modifications of an old one ... if done right, todays notion of "backup" becomes a very different and much more efficient animal. Then combine it with an idea that at first may seem orthogonal: the only thing that can get stored on disk is an object (here meant in the programming language sense of the word). That notion takes over what used to be called "file format" or "record management" in OSes like MVS and VMS. Usually, the "object in memory" is a container class (such as a list or vector or database table) of smaller objects. As an example, what today is a file full of C source code (stored as ASCII characters, with a newline to indicate where new source line starts) might get stored as a list of C statements, each of them stored as a graph of that statement's parse tree. When combined with the earlier idea that every version of a source is an immutable file system object, the whole notion of "editor" or "compiler" becomes much more powerful. Today's IDEs do a lot of this manually, but maybe it would be good if this was the universal format for all files. Obviously, existing flat files (arrays of bytes) would have to be supported for backwards compatibility.

These are the kind of things that would take a smart group of CS researchers (a big prof, a few ass profs, a few postdocs, a dozen grad students) a few years to plan, bounce off people, prototype, and then get to production. It's the kind of thing that could be done by a university research group and get a few PhDs and MSs done. Except today it couldn't: academic systems research has fragmented way too much and has moved way too much upstream (into fields such as storage, networking, distributed systems), and there is no funding mechanism for "make general use OSes more useful and extensible".

The BSDs, being well engineered, having a coherent core group (Hi Kirk!), and traditionally having strong links to the research community would be the perfect platform for this. Doing this in Linux would be impossible, because Linus would have one of his famous hissy fits. And the FAANG don't care, their scale is such that an individual OS node is no longer important enough to worry about; they instead build much larger systems (for an example, look at gRPC, MapReduce and Borg, which created Hadoop, Docker and Kubernetes).
 
So here is my rough proposal: Change all CLI programs that ship with the FreeBSD base to use a standardized command line parser.
AmigaOS had that, too. And the data types.library. Cool stuff, light years ahead of Windows. The data storage you mention was iirc first used in the apple newton. The pre-parsed source code was done in gfa basic, some forth dialects also used it. The whole file format mess could have been skipped with iff.library. I would love to see dbus replaced with arexx, but that would trigger a tsunami from the NIH crowd.
 
Precompiled latest version of Cinnamon.
Ports have very little to do with the FreeBSD version. Unlike most (if not all) Linux distributions where versions of third party software is linked to the "version" of the distribution. All supported versions of FreeBSD use one and the same ports tree, thus they'll have the exact same versions of third party software available to them (with some exceptions).
 
Change all CLI programs that ship with the FreeBSD base to use a standardized command line parser. One that understands the differences between options and arguments, knows the domain of arguments for autocomplete, help and globbing
Maybe programs under /bin/ and /sbin/. Perhaps /usr/bin/ and /usr/sbin/ too. I don't fully understand, but it will help with reducing use of bash in certain parts of the extended operating system.

sysutils/toybox is a BSD alternative to sysutils/busybox. Maybe it can be tested on that as an example. Why does toybox need gmake anyway? since it's a BSD program.

However, I didn't fully understand how to distinguish using programs in toybox as opposed to those in FreeBSD's base system. Perhaps, to make the default shell location to use toybox directories, but that will leave out plenty of base system files that toybox doesn't have and equal to? When installed, pkg info -l toybox shows toybox in /usr/local/bin/ and a different toybox file under a toy box bin directory. Other binaries are in locations of /usr/local/toybox/bin/, /usr/local/toybox/usr/bin/, /usr/local/toybox/sbin/, and /usr/local/toybox/usr/sbin/. All of these files under the toybox directory soft link to the toybox binary itself. The file names of toybox closely match those of /usr/bin/ differing
Decide on which shell is the best one to use, and make that shell callable as a library.
I think ksh. Mksh is more user friendly, however it's not as standard as other Korn shells. So, maybe a better enhanced ksh, which is closer to mksh, while adhering to compatibility with standard Korn shells. Though, maybe just plain sh. Ksh or sh.
 
+1
The zsh license, to me, seems quite broad. With the upcoming pkgbase offical intro as default, I don't see any obvious reasons for not considering that.
Unfortunately, unlikely.
shells/zsh has lang/perl5.36 as BUILD_DEPENDS.

My understanding is, to include something in base, it should
  • BSD-compatibully licensed,
  • and buildable with toolchains in base only.
Perl was once incorporated in base, but dropped because of too frequent upgrades to incorporate in base (becomes too outdated in support cycle for base). So depending on perl other than tests would not be accepted.

So if all parts using perl can be reimplemented with anything in /bin/sh, /usr/bin/awk, /usr/bin/m4 or /usr/bin/sed (or something others in base) BY UPSTREAM, I think there could be some possibilities.

More likely doable option would be to allow shells (not limited with zsh) in ports that are statically linked (at least with non-base libraries) to be installed into /bin/. Maybe still a plenty of objections, though, but kernel modules in ports are installed into /boot/modules, which is outside of /usr/local to allow bootint on systems that /usr/local is NOT in root partition. Why not shells in /bin, which has no dependencies in /usr/local?
 
:(

Thanks; in addition Makefile shows:
Code:
GDBM_LIB_DEPENDS=    libgdbm.so:databases/gdbm
PCRE_LIB_DEPENDS=    libpcre.so:devel/pcre
Both do not bode well wrt to being included.
FYI: Dependencies listed in FreshPorts are of default only, so dependencies specific to non-default options are needed to read Makefile of the port (including included ones).

And forgot to mention. I myself am using zsh as my interactive shell, invoked conditionally through config for /bin/tcsh (for emergency).
I have if ( -X zsh && -f ~/.Use_zsh ) exec zsh in my ~/.tcshrc.mine, so I can automatically start zsh on login if I create marker file ~/.Use_zsh and stop it by removing it.
And if zsh somehow accidentally deinstalled (i.e., by mis-behaved pkg), I can still use base tcsh, which is my configured login shell.

But for scripting, using /bin/sh only (except for configuration files of each shells).
 
removal of any and all "colorization of text mode output" being a default...if someone wants to add color to text screens then they should have to explicitly turn it on. It shouldn't be up to the rest of us to turn it off.

I like it; it makes stuff like dmesg easier to scan for errors:
Screenshot From 2025-08-18 09-05-43.png

Stuff like systemd-analyze security having emojis seems a little unnecessary though (on Linux; not sure if FreeBSD does it anywhere):
Screenshot From 2025-08-18 09-08-15.png
 
Oh my, systemd has emojis? Doesn't surprise me, but I guess developers are getting younger and more phone-oriented. I doubt FreeBSD does it anywhere. I see it can be turned off in systemd, but it seems very systemd-ish to my, admittedly, jaundiced eye.
 
Oh my, systemd has emojis? Doesn't surprise me, but I guess developers are getting younger and more phone-oriented. I doubt FreeBSD does it anywhere. I see it can be turned off in systemd, but it seems very systemd-ish to my, admittedly, jaundiced eye.
I guess they add emojis in case people don't understand what the words "unsafe", "exposed", "medium" or "ok" mean ...
Well it feels good to be in the BSD world.
 
I'd like to have a blacklist of forbidden commands, all the commands that a pebcak master like should never run... As I did recently that I erased my "/" 🤦‍♂️
 
Here is an idea. I don't know whether it is a good idea. In a nutshell, it amount to turning FreeBSD into a research operating system, and try out whether some of the design principles of Unix can be completely overthrown, but do so in a compatible fashion.

I have no problem with any OS being a research tool for future features...BUT, the products of that research should never be shoehorned back into the parent which spawned it. I was around for the heterodyning that occured when attempting to unify BSD and SVR5 back into a single UNIX. It wasn't pretty and it didn't work. Don't let a 30+ year old mistake take place with a new generation.
 
I like it; it makes stuff like dmesg easier to scan for errors:
But for those of us who run several xterms, all with different foreground/background combinations, the programmer chosen defaults are often impossible to read. command line utils should be treated as if they are running on a vt100, with nothing fancy at all...about the only tolerable ANSI code attributes would be bold or underline. It should be up to the user to opt-in for color rather than make us opt-out. I get enough opt-out crap in the modern e-commerce world. Don't need to add to the frustration.
 
I have no problem with any OS being a research tool for future features...BUT, the products of that research should never be shoehorned back into the parent which spawned it.
Au contraire, mon ami: The history of BSD and Unix is to be a research platform. Once it works well (stable, reliable, does what people need), the results of such research should be mainstreamed back in. Obviously only once it works well, not before. And yes, I was there for the BSD vs. SysV stuff; it was amusing to watch FROM A DISTANCE.

So a research program such as the one outlined above might take a handful years to get to the "PhD and MS thesis and conference publication" stage, and then another handful of years to get to production. But it is nice if you don't have to change horses (base operating system) in the middle of that voyage.
 
command line utils should be treated as if they are running on a vt100, with nothing fancy at all...about the only tolerable ANSI code attributes would be bold or underline. It should be up to the user to opt-in for color rather than make us opt-out
Come on Kent. VT102 at least please.... What was that circa 1983 DEC?

the primary additional feature of theVT102 terminal over the VT100 is character insertion and deletion
 
Back
Top