system programming
Heiko Wundram (Beenic)
wundram at beenic.net
Thu Jan 10 08:36:43 PST 2008
Am Donnerstag, 10. Januar 2008 16:38:47 schrieb Michael S:
> I am a computer science student taking the operating
> systems course. All of our assignments are supposed
> run on Linux and I don't have
> a Linux machine.
> I was wondering mostly if FreeBSD uses the same
> functions for process / thread handling, whether the
> header files (e.g. unistd.h, stdlib.h, etc) are in the
> same locations
> and whether the pthread library is present by default.
Whereas both systems could be termed mostly POSIX compliant (and thus you
should be able to recompile program sources freely on each of the two without
modifications to the source and get equal behaviour), FreeBSD's libc and
kernel is (in my experience) more and the glibc (i.e., the most commonly used
libc on Linux) and the Linux kernel generally somewhat less close/compliant
to the specification in border- or seldom used cases.
This includes (for example) the (still, IIRC) default pthreads implementation
on Linux (called LinuxThreads, even though a new/"better" threads
implementation has been available for quite some time, called NPTL), which
doesn't properly support thread cancellation (or rather doesn't support them
at all), and only implements a subset of the POSIX.1c (i.e., POSIX Threads)
specification. FreeBSDs pthreads library is fully POSIX.1c compliant, IIRC.
Some other things which I've hit when recompiling programs I implemented on
FreeBSD for Linux generally concern more "esoteric" differences, like glibc
missing a sys/endian.h (which is a heavens gift), but sys/endian.h isn't part
of the POSIX standard anyway.
What's not so "esoteric" though: socket behaviour isn't specified in the POSIX
standard either; if you implement networking programs, you'll soon find that
for example the error return values differ slightly between the two operating
systems, making proper error recovery all the harder. Preprocessor macros are
your friend, even in C++.
For the rest, the compiler/linker-toolchain you'll use under Linux is (most
probably) the exact same as under FreeBSD (i.e., gcc + GNU binutils), and as
such you'll not have to expect any problems here. Concerning make: if you
stick to writing GNU make Makefiles under FreeBSD, you'll also be on the safe
side there, because I've yet to find a properly functioning BSD make
implementation for Linux. Finally: stay away from the "autotools" if you can.
They make your brain cringe.
And, to finish up: generally you'll not feel the differences. And if you do,
you've (most probably) hit operating system specific (i.e., non
POSIX-specified) behaviour, anyway, and were on your own from the start.
--
Heiko Wundram
Product & Application Development
More information about the freebsd-questions
mailing list