I have a dev board, with windows embedded, that boots up in 2 seconds to desktop. And it plays video for example and has everything you want from an embedded computer.
So? My laptop (HP Elitebook 840 G4) takes about two seconds to de-hibernate also, from complete power off to full userspace working.
I have a 3G/4G/LTE "modem" running Linux, ZTE MF-823, that boots from power off to full operation in less than a second, and connects within a few seconds. No video or GUI at all, though. It does run a full Linux userspace, including an SSH server, so I consider it pretty much equivalent to a cable modem, software-wise. Any boot delay over a second is bad integration; but as mentioned, making the DOCSIS connection may take quite some time in some conditions, because of DOCSIS itself.
Just because most devices using Linux are integrated by what I can only assume are monkeys in a hurry to be somewhere else, does not mean the bloat is unavoidable.
Kinda applies to Windows, too, although I don't know how much of the unneeded stuff (GUI etc.) you can omit for embedded Windows installations.
For Windows, automatically installed bloatware, including "drivers" that contain all sorts of unneeded crap, is a much bigger problem -- again, poor integrators to blame.
(Integrators, or whatever you call the
monkeys people that put it all together and sell to other people, then run off, never to be heard again.)
In fact, it is rather fun to create ones own Linux userspace, starting at the
init process. Just make sure your kernel has all drivers your board needs built in, and you can create an initrd out of your own userspace, doing whatever you want; then, you can write your own
init in Bash or Python or any other language (you have an interpreter for installed on the initrd). It'll boot crazy fast. If you use a modular kernel, you'll need some variant of
udev to manage the userspace side, but then the image will work with different hardware configurations on that architecture.
I suppose if more people played with that, and understood how easy it is after you get some experience with it, we might get much better embedded Linux installations.
(The
init process is a bit special in that it should reap children that have exited, and by default ignore any signals that might be sent to it, and never exits; it also always has process ID 1. So, usually one uses an
init binary that starts your other processes. It just makes things much more robust. In current typical Linux installations, the initial ramdisk contains scripts to mount the other filesystems (root filesystem is usually mounted by the kernel itself, based on information passed to it by the boot loader), load kernel drivers for detected hardware, and then pivot filesystem root to the actual mounted root filesystem, and continue booting from there. If one starts from modifying an existing Linux installation, that is like throwing oneself into the deep end of the pool, instead of playing in the kiddie pool to get a feel for it first.)