Well, Raspbian is nice but it's so... 32 bit.
For some purposes, we'd want Ubuntu 64 bit, 20.04 LTS to boot to make full use of the RPI's resources.
Moreover, we want to boot from an USB connected SSD drive, the SD Cards just don't do.
While Raspbian boots nicely from an USB, the problem with Ubuntu is the kernel is in compressed format (which is not supported [yet?] by booting from USB.
To boot Ubuntu, you need to uncompress the vmlinuz kernel and rename the uncompressed kernel to vmlinux (on your ssd drive):
cp vmlinuz vmlinuz.bk
mv vmlinuz vmlinux.gz
gunzip vmlinux.gz
Then, you need to modify the config.txt file in your boot drive:
[pi4]
max_framebuffers=2
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel
The first time you boot now it should work. The problem is that after updates (which may occur automatically at the second boot), you may end up with a new uncompressed kernel.
So after you upgraded packages, decompress the kernel again using the above steps.
At first I wasn't very enthusiastic about automatic decompression of new kernels after upgrade, but I modified the solution at this resource a little bit.
You can find a gist here for a slightly modified decompression of the kernel.
This seems to do the job, more or less. I skipped the automatic update checks as I'd prefer to do it manually. The system may hang if you do something wrong there.
ubuntu rpi3