Hey, in case this is still relevant, or someone else sumbles upon this. I have tried it using the Linux compatability layer and it seems to work. I haven't done any extensive testing, but the server does start and I was able to join it.
I setup the server in a FreeBSD jail, here are some commands that you should be able to copy-paste on a fresh FreeBSD install, and it should "just work", you however likely want to change some things (e.g. changing the jail location from "/jail" to something different). I tested these on x86 with FreeBSD 15.1. I am making use of a debian jail in this case, installing the .NET runtime, and then doing a fairly basic vintage story server setup. I still have to figure out how to get the server auto-starting and auto-stopping upon jail starting/stopping.
# Prepare host
pkg install -y debootstrap
service linux enable
service linux start
# Prepare jail
mkdir /jail
debootstrap trixie /jail
cd /jail/etc
echo "root::0:0::0:0::/root:/bin/bash" > ./master.passwd
pwd_mkdb -d . -p ./master.passwd
# Configure jail
cat <<'EOS' >> /etc/jail.conf
vs-server {
exec.start = "/bin/true";
exec.stop = "/bin/true";
exec.consolelog = "/var/log/jail_console_${name}.log";
persist;
allow.raw_sockets;
allow.mlock; # Required by the .NET runtime, see https://github.com/sec/dotnet-core-freebsd-source-build/issues/24
exec.clean;
host.hostname = "${name}";
path = "/jail";
# Linux file systems
mount += "devfs ${path}/dev devfs rw,late 0 0";
mount += "tmpfs ${path}/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0";
mount += "fdescfs ${path}/dev/fd fdescfs rw,late,linrdlnk 0 0";
mount += "linprocfs ${path}/proc linprocfs rw,late 0 0";
mount += "linsysfs ${path}/sys linsysfs rw,late 0 0";
# Change this to your own preferences!
ip4.addr = "192.168.122.220";
# TODO: IPv6
interface = "em0";
}
EOS
# Start the jail
service jail enable
service jail start
#
jexec vs-server /bin/bash
apt update
apt install -y wget
# https://dotnet.microsoft.com/en-us/download
wget https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
apt update
apt install -y dotnet-runtime-10.0
# https://account.vintagestory.at/
wget https://cdn.vintagestory.at/gamefiles/stable/vs_server_linux-x64_1.22.6.tar.gz
mkdir -p /opt/vs-server
tar xzf *.tar.gz -C /opt/vs-server
rm *.tar.gz
useradd -m -s /bin/bash vs-server
mkdir -p /var/opt/vs-server
chown vs-server:vs-server /var/opt/vs-server
su vs-server -c "dotnet /opt/vs-server/VintagestoryServer.dll --dataPath /var/opt/vs-server --genconfig"
nano /var/opt/vs-server/serverconfig.json
exit
PS: I plan on doing further FreeBSD + Vintage Story server testing, I will follow up this reply with the results! ^-^