BSD Planet * BSD People
May 09, 2008
Kienja Kenobi wrote me to advertize the new
DaemonForums
website:
``The community is one of the most important aspects of *BSD. Without it, new
users are not likely to succeed. Without the support found in places such as
mailing lists and forums, new users are not even likely to make an attempt
at a new operating system. To meet the need for easily accessible,
user-friendly forums for *BSD, DaemonForums has been created.
Why DaemonForums? Up until recently, BSDForums.org has been the
authoritative resource for *BSD forum help. However, due to the inactivity
of the sole administrator of BSDForums, the forums have become impossible to
manage due to volumes of spam, outdated software, and an anti-free (as in
freedom) copyright license. The two active moderators on BSDForums have been
clearing spam at a non-stop pace for months, but they have been powerless to
put a long-term end to any spam. The moderators have now given up the
impossible battle at BSDForums, so soon it will be flooded by useless, junk
posts that outweigh the useful, BSD-oriented information. Therefore,
DaemonForums is filling the gap. (See:
http://www.bsdforums.org/forums/showthread.php?t=59607)
DaemonForums hopes to become the one-stop resource for completely
help-oriented *BSD information. The leading members of BSDForums have
migrated to DaemonForums and are now spear-heading the movement to the new
forums, which are built specifically to prevent spam and outlast any single
administrator.''
Enjoy!
May 09, 2008 01:23 AM
May 08, 2008
The following kernel-related projects were raised in the
past few weeks:
- Kernel Preemption:
Andrew Doran has continued his work towards fine-grained
locking, and he has proposed a
patch to implement kernel preemption,
i.e. that in a realtime environment, high-priority processes can
interrupt system calls running inside the kernel.
Handling the Floating Point Unit (FPU) was
added later on --
the FPU needs special attention as saving and restoring is
expensive, and doesn't need to be done in many cases. But if a
program uses it, care must be taken to handle the case.
The exact handling is
explained by Christoph Egger.
While there,
Christoph also outlined the
roadmap for getting realtime support
in NetBSD - there are still a number of bits missing, but being
able to preempt the kernel is a good first step!
- Fine-grained socket locking:
In order to allow fine-grained locking (instead of blocking
all other processes from entering the kernel, as is done in the
"biglock" SMP approach), many kernel subsystems need to be changed.
The socket system is the core part of interprocess communication,
and Andrew Doran has changed it to
use fine-grained locking
now.
In that context, the question of
what code still runs with the biglock held, and
Andrew gave an overview where
more work is needed: some file systems (lfs, ext2fs, nfs),
most of the drivers, protocols like TCP/IP, Veriexec, and
some machine-dependent parts.
Veriexec-Hacker Brett Lymn
added details on the status of Veriexec
with respect to its transition towards fine-grained locking.
- Kernel modules and ramdisk:
A change in kernel modules was proposed
some time ago, and
Andrew Doran has used this scheme now to unify the way
many ports handle the install media: There, the kernel loaded
contains a ramdisk (miniroot) image inside the kernel, which is then used
as root-filesystem for the kernel, containing the install tools.
In order to split things and eventually use a stock GENERIC kernel
for both running and installing, Andy has
changed the
x86 boot process to load the miniroot as a kernel module.
When booting it may be useful to select one of several ramdisks:
one for installing, and one for resuing the system,
For this, the recently introduced boot.cfg file was
extended to handle kernel modules in the boot menu.
Izumi Tsutsui has
made an ISO with all changes for testing available.
- Device File System (devfs):
Another area of the kernel where a lot of work is currently being
done by Matt Fleming is NetBSD's device driver infrastructure,
esp. under aspects of dynamic attaching, detaching, and suspending
(power management!). To talk to the various drivers, device nodes in
the /dev directory are kept right now, but those are static and
need to be updated when a new driver is added.
Matt is working on a Device Filesystem (devfs) that dynamically
created /dev from the list of devices inside the kernel. The
fileysstem will also handle dynamic creation and deletion of
nodes, and as an important case it will also keep permissions
across reboots, if someone changes permissions manually.
The work is at a very mature point right now and needs some
testing - see
Matt's mail to the tech-kern list
for more information!
- Testing driver attachment:
While talking about testing of device drivers,
David Young has
reminded driver developers to test
individual drivers' detachment and re-attachment,
suspension and resumption after changes.
He has also
posted a how-to for those tests,
using
drvctl(8).
(The manpage needs some updating, sorry --
UTSL :-)
May 08, 2008 03:41 PM
May 06, 2008
Leonardo Taccari had the idea to make a
reference card for NetBSD and pkgsrc, and
has posted about it.
The card is available in
english
and
italian
language, and covers links, commands for audio, localization,
managing users and groups, monitoring the system, the NetBSD
rc.d startup system, starting and stopping of services, wscons,
pkgsrc and related tools and more.
May 06, 2008 11:57 PM
April 30, 2008
Lubomir Sedlacik has sent out a
reminder about the pkgsrcCon 2008 registration and Call for Paper:
``There is only a month left until the
registration deadline, June 1st!
The fifth annual pkgsrcCon will convene in Berlin, Germany on
Jun 13 - 15, 2007.
pkgsrcCon is a technical conference for people working on the NetBSD
Packages Collection (pkgsrc), focusing on existing technologies,
research projects, and works-in-progress in pkgsrc infrastructure.
Developers, contributors, and users are all welcome to attend, and to
share an excellent opportunity to gather and to discuss ideas
face-to-face on how to improve pkgsrc.
Registration is required for attendance since we have to provide
beforehand a list of participants to the university. Everyone whose
name is not on the list will not be able to enter the campus (and thus
attend pkgsrcCon) on Saturday and Sunday. Also, for that reason please
be sure to bring along with you some valid photo ID of yours (passport,
government issued ID card).
There is also still some room for more presentations!
Deadline for presentation submissions is May 25th.
For more information, including:
- How to register, and
- How to submit a presentation proposal,
please visit
http://www.pkgsrcCon.org/2008/''
April 30, 2008 11:42 AM
April 28, 2008
After the DaemonNews paper magazine is long gone, there's
a new paper magazine
BSD Magazine now!
Dru Lavigne lists the contents
in her blog article on the mag,
shamelessly ripped off here:
- Dru Lavigne, FreeBSD 7.0 Installation and Configuration
- Michael Lucas, FreeBSD's bsnmp
- Jan Stedehouder, Pushing BSD an an Open Source Desktop
- Svetoslav Chukov, PC-BSD Overview
- Richard Bejtlich, Sguil 0.7.0 on FreeBSD 7.0
- Jay Kruizenga, How to Dual-Boot Vista with BSD
- Peter Hansteen, Keep Smiling, Waste Spammers' Time
- Henrik Lund Kramshoj, Defense in Depth and FOSS
- Donald Hayford, NetBSD on the NSLU2
- Girish Venkatachalam, OpenBSD pf
- Eric Schnoebelen, Instant Messaging with jabber/XMPP
- Federico Biancuzzi, Interview with FreeBSD Developer Jeff Roberson
- Mikel King, What is in a Certification
- Henrik Lund Kramshoj, Review of the Book of PF
Besides the articles, the mag contains a DVD with FreeBSD 7.0.
I guess this is a very good thing, and an opportunity to show
what NetBSD is and can do. I'm sure the publishers will be happy
to receive more articles about NetBSD -- contribute!
April 28, 2008 09:54 PM
In embedded environments, space is always scarce - be it physically,
for storage (disk/flash space), or for for computer memory.
Mikko Rapeli has made that experience with NetBSD, and
posted his solution,
which is to reduce NetBSD's libc in size -- see
his documentation!
Jörg Sonnenberger
pointed out
that another possible approach to save both diskspace and also (to some extent)
RAM when running executables is not to use shared libs, but to use
NetBSD's "crunchgen". Crunchgen statically links multiple binaries and their
libs into a single executable, saving diskspace and RAM -- exactly
what "busybox" does in the Linux world,
just highly configurable and working
with any sources. This is a
very cool feature of NetBSD, which is used to prepare the
install media from src/distrib, but it's also a very undocumented area
of NetBSD. Any takers for a "beastybox" article? :-)
April 28, 2008 09:48 PM
NetBSD's kernel is under very active development these days, and
while many changes are related to improve SMP, it's not the only area.
An area where very interesting and unique work is being done is the
filesystem interfaces that Antti Kantee is working. Things started
out as a past year's Google "userfs" SoC project to implement an interface
for running filesystem code in userland. The project was imported
into NetBSD some time ago. On top of that, a library that mimics the
Linux interface for filesystems in userland. Following the Linux
name FUSE, the re-implementation is called ReFUSE (pun intended :).
See the
webpage about puffs, refuse, FUSE
on the NetBSD website for more information.
Another project that was started by Antti after his work to
run filesystem code in userland is "rump". The project allows to use
"ordinary" filesystems that usually run inside the kernel, and
mimic an environment similar to what's available inside the kernel,
and move the whole filesystem into userland - verbatime, with
no code changes! This allows to develop filesystem code in userland,
and later on move it inside the kernel with no further changes - a
bit step forward for filesystem development!
This all sounds rather easy, but as filesystems need to move data between
storage and memory, a big issue in filesystems is interfacing with the
virtual memory subsystem, and adding interfaces like puffs and ReFUSE
also needs to consider VM for efficient transfers and caching.
Work in this area is still ongoing, and I've asked Antti about his
recent achievements in this area[1]. While the only user-visible
change is caching and performance improvements in the Secure
Shell filesystem's handler "mount_psshfs", most of the changes
are on the inside. Antti wrote me:
``The interesting ones from a programmer's perspective are probably:
Finally, while not really useful for anything except puffs development,
I think the following is cool from the perspective of completeness:
''
With
puffs and
rump, there are two very interesting and active projects
doing research in filesystems on NetBSD, which may lead to changes in
the way filesystems are understood in the Unix world. While there,
a third project that may be worth watching in this regards is
this year's Google
hurdt
Summer of Code project by Marek Dopiera, which aims at
implementing Hurd translators for NetBSD,
Update:
Antti dropped me a note that another project related to
filesystems is this year's "fs-utils"
SoC project. The goal is to create a userland tool to manipulate filesystem
images, and the idea is to reuse kernel code with the
ukfs library. That way, no redundancy between kernel sources
and userland sources are created, and both areas benefit from mutual
testing and code maturity.
April 28, 2008 09:28 PM
April 27, 2008
Google News has pointed this outa few times, but as the
NetBSD/evbppc
port runs on their
OpenBlockS
for some time, I haven't paid much attention to
Plat'Home's new
OpenMicroServer.
Timo Schoeler has pointed me at an interesting article in
The Register, though
(part one /
two), which
mentions a funny detail on what the machines ship with as
operating system: ``The unit runs the SSD Linux operating system, which straps NetBSD userland functions onto the Linux kernel.''
From the
SSD/Linux homepage:
``SSD/Linux is the Linux distribution developed by Plat'Home, for use with the MicroServer series. The distribution is optimized to fit on a small internal ROM, while offering all necessary functions for networking and peripheral devices.
The name of the distribution is derived from its place of development, Sotokanda in Tokyo, in imitation of BSD. It is published under a BSD-style open license. See the User's Guide for more information.
While the OS uses a Linux kernel, most of the userland is taken from NetBSD.''
April 27, 2008 12:57 PM
April 26, 2008
Let me quote this in full from
O'Reilly's Allison Randal's blog:
``For the 4th year running, Google and O'Reilly will present a set of Open Source Awards at OSCON 2008. The awards recognize individual contributors who have demonstrated exceptional leadership, creativity, and collaboration in the development of Open Source Software. Past recipients for 2005-2007 include Doc Searls, Jeff Waugh, Gerv Markham, Julian Seward, David Heinemeier Hansson, Karl Fogel, David Recordon, and Paul Vixie.
The nomination process is open to the entire open source community, closing May 15th, 2008. Send your nominations to osawards AT oreilly DOT com. Nominations should include the name of the recipient, any associated project/org, suggested title for the award ("Best Hacker", "Best Community Builder", etc.), and a description of why you are nominating the individual. Google and O'Reilly employees cannot be nominated.''
Who's your #1 NetBSD person? Discuss at netbsd-advocacy@NetBSD.org,
suggest to osawards@oreilly.com!
April 26, 2008 12:43 PM
April 24, 2008
Just a mini-catchup, I'm too lazy to duplicate the details here:
Speaking of importing 3rd party code... I think it would be nice if
someone would actually start work to closely integrate 3rd packages
with the NetBSD operating system's base install. That way, such
software could be installed (and updated...) via the package handling
system, without juggling around the sources, rebuilding and reinstalling
the base system. I'm sure there's
plenty
of
stuff
in NetBSD's src that could be phased out with the help of a
properly integrated packaging system. Any takers?
April 24, 2008 02:16 PM
April 17, 2008
From the
e-linux.it announcement:
``Draco GNU/Linux is a distribution based on Slackware Linux and
"pkgsrc", a package management system developed by NetBSD.
A new
version, 0.3, was released a few days ago: "Introducing Draco GNU/Linux
0.3.0. Featuring kernel 2.6.23 (with optional 2.6.16), glibc 2.6.1,
GCC 4.1.2, and OSS 4.0. Selected packages from pkgsrc are available
through the repository and on an ISO image. This release also introduces
Draco Desktop. Draco Desktop contains the latest stable Draco release,
bundled with software from the latest pkgsrc branch. Draco Desktop
defaults to Xfce, with Fluxbox as an option." Here is the brief
release
announcement. Draco GNU/Linux 0.3.0 is available for download either as
a minimal base system or a "Desktop" edition, an installation CD with
Xfce and Fluxbox window managers.
Download
the CD images from here:
draco-0.3.0.iso (232MB,
MD5),
draco-desktop-2007Q4.iso (596MB, MD5).''
April 17, 2008 12:11 PM
I've committed a
webpage describing NetBSD's support of the Asus EeePC.
This is done with input from several people, and I'll be happy to add more
data to the page. E.g. the Installation section could do with some more
words.
Also, if someone has a picture of an EeePC running NetBSD, that'd be nice
to add to that page (and to our "NetBSD in Action" gallery). I don't own
an EeePC myself to make such a picture. URLs preferred.
April 17, 2008 12:05 AM
April 15, 2008
Watched episode 5 from season 4, titled <a href="http://www.lostpedia.com/wiki/The_Constant">The Constant</a>, yesterday night. As a couple of friends put it: "Best. Episode. Ever." Let's hope this trend doesn't end here!<div><br /></div><div>3 more left to catch up.</div></content>
by Julio M. Merino Vidal at April 15, 2008 09:48 PM
April 13, 2008
Trying to get the Linux firefox binary going, I got this today:
% firefox-linux
/usr/pkg/lib/firefox-linux/firefox-bin: symbol lookup error: /usr/X11R6/lib/libfreetype.so.9: undefined symbol: _ctype_
After upgrading all the packages, the error persisted (doh).
After some digging,
the solution
is quite simple:
% unsetenv LD_LIBRARY_PATH
April 13, 2008 08:27 PM
April 12, 2008
For a rather long while I had been able to avoid the use of the <a href="http://subversion.tigris.org/">Subversion</a> services offered by my research group even if they were omnipresent. But today, this lucky trend vanished. I have been "forced" to use one of these devilish repositories to add some of my stuff. Using this goes against my "principles", as a colleague said.<div><br /></div><div>If you don't know it, Subversion is a <span class="Apple-style-span" style="font-style: italic;">centralized</span> version control system. Linear history, the non-transparent way to back up the master server, primitive merging interfaces and, the worst thing of all, <span class="Apple-style-span" style="font-style: italic;">the need to access the network for </span><span class="Apple-style-span" style="font-style: italic; ">every single operation</span> are unbearable facts.</div><div><br /></div><div>Using a centralized VCS is like going back in time a million years. (Oh, excuse me, a million is too few.) I <span class="Apple-style-span" style="font-style: italic;">hate</span> it! I recently went on a <a href="http://julipedia.blogspot.com/2008/04/netbsd-talk-at-isla-cristina.html">trip</a> and didn't have Internet access neither on the plane nor on the hotel; do you know how cool it was to still have full access (not just the working copy, that is) to my code, documents and everything else? And even if you have Internet access, can you imagine how fast you can work without having to wait for the network?</div><div><br /></div><div>Well, I can't really blame the administrators. As far as I can tell, they are not too familiar with VCSs and, when making a decision, they just went for what was everywhere, which unfortunately is Subversion is everywhere. Everybody is making that mistake in this department and university.</div><div><br /></div><div>Let's see when I will have some free time to prepare a presentation about DVCSs (including <a href="http://monotone.ca/">Monotone</a> as a case study) and give it to the whole department. Given today facts, I should do this as soon as possible.</div><div><br /></div><div></end-of-rant></div><div><br /></div><div>Administrators, I know you are reading me. Don't take this the wrong way! ;-)</div></content>
by Julio M. Merino Vidal at April 12, 2008 08:48 PM
From the
freshmeat.net announcement:
`` The Machine Emulator, or tme, provides a general-purpose framework for computer emulation. The goal is to create a large library of modules, each emulating a specific computer chip, bus, board, etc. These modules offer standard interfaces that allow you to connect them together to create a whole machine emulation with a minimum of effort.
This release can emulate a Sun 2/120 running NetBSD, a Sun 2/120 running NetBSD, a Sun 3/150 running NetBSD, and a SPARCstation 2 running NetBSD or SunOS 4.1.4 (aka Solaris 1.1.2).''
The interesting part here is the Sun 3 support - machines of that class
run on Motorola m68k CPUs, and so far not many emulators are available
for that machine, esp. ones that can run NetBSD. (I know about UAE,
but I haven't heared reports of it running NetBSD. Correct me if I'm wrong!)
April 12, 2008 02:35 AM
April 09, 2008
There's more to SMP than just Intel- and -compatible machines.
PowerPC-hackers Tim Rightnour and Matt Thomas have added support for SMP on
OpenFirmware based PowerPC machines, i.e. the
NetBSD/ofppc port.
The support is already committed to the NetBSD-current source tree,
and Tim has posted
the dmesg output of a 4-CPU machine, an
IBM 7044-270.
He also notes that this is the first PowerPC machine with
four processors to ever run NetBSD.
April 09, 2008 01:17 AM
Andew Doran is currently employed by The NetBSD Foundation to change
NetBSD's SMP implementation from big-lock to fine-grained kernel locking.
With hin, Mindaugas Rasiukevicius has done a lot of work on NetBSD's
scheduler, and Yamamoto Takashi has added a fair share of further
infrastructure work in the kernel.
I've asked them about their progress
in the past months, and the following points give a rough idea on what
was achieved so far, and what can still be expected.
The story so far.
Andrew Doran writes: ``
The kernel synchronization model has been completely revamped since NetBSD
4.0, with the goal of making NetBSD a fully multithreaded, multiprocessor
system with complete support for soft real-time applications.
Through NetBSD 4.0, the kernel used spinlocks and a per-CPU interrupt
priority level (the spl(9) system) to provide mutual exclusion. These
mechanisms did not lend themselves well to a multiprocessor environment
supporting kernel preemption. Rules governing their use had been built up
over many years of development, making them difficult to understand and use
well. The use of thread based (lock) synchronization was limited and the
available synchronization primitive (lockmgr) was inefficient and slow to
execute.
In development branch that will becomple NetBSD 5.0, a new rich set of
synchronization primitives and software tools have been developed to ease
writing multithreaded kernel code that executes efficiently and safely on
SMP systems. Some of these are:
- Thread-base adaptive mutexes. These are lightweight, exclusive locks that
use threads as the focus of synchronization activity. Adaptive mutexes
typically behave like spinlock, but under specific conditions an attempt
to acquire an already held adaptive mutex may cause the acquring thread to
sleep. Sleep activity occurs rarely. Busy-waiting is typically more
efficient because mutex hold times are most often short. In contrast to
pure spinlocks, a thread holding an adaptive mutex may be preempted in the
kernel, which can allow for reduced latency where soft real-time
application are in use on the system.
- Reader/writer locks. These are lightweight shared/exclusive locks that
again use threads as the focus of synchronization activity. Their area of
use is limited, most of it being in the file system code.
- CPU based spin mutexes, used mainly within the scheduler, device drivers
and device driver support code. Pure spin mutexes are used when it is not
safe, or impossible for, a thread to use a synchronization method that
could block such as an adaptive mutex.
- Priority inheritance, implemented in support of soft real-time applications.
Where a high priority thread is blocked waiting for a resource held by a
lower priority thread, the kernel can temporarily "lend" a high priority
level to the lower priority thread. This helps to ensure that the lower
priority thread does no unduly obstruct the progress of the higher
priority thread.
- Atomic operations. A full set of atomic operations implementing arithmetic
and memory barrier operations has been provided. The atomic operations are
available both in the kernel and to user applications, via the C library.
- Generic cross calls: a facility that allows one CPU or thread to easily
make an arbitrary function call on any other CPUs in the system.
- The interrupt priority level interfaces (spl(9)) have long been used to
block interrupts on a CPU-local basis. These interfaces have been
simplified and streamlined to allow for code and algorithms that make use
of low cost CPU-local synchronization. In addition, APIs are provided that
allow detection of kernel preemption and allow the programmer to
temporarily disable preemption across critical sections of code that
cannot tolerate any interruption.
- "percpu" memory allocator: a simple memory allocator that provides
arbitrary amounts of keyed storage. Allocations are replicated across all
CPUs in the system and each CPU has its own private instance of any
allocated object. Together, the cross call facility, atomic operations,
spl(9) interfaces and percpu allocator make it easy to build lightweight,
lock-free algorithms.
- Lockless memory allocators: the standard kernel memory allocators have been
augmented with per-CPU caches which signficantly avoid costly synchronization
overhead typically associated with allocation of memory on a multiprocessor
system. ''
Mindaugas adds a few more items: ``
- New thread scheduler, named M2: it reduces the lock contention, and
increases the thread affinity to avoid cache thrashing - this essentially
improves the performance on SMP systems. M2 implements time-sharing class,
and POSIX real-time extensions, used by soft real-time applications.
- Processor sets and affinity API provides possibility to bind the processes
or threads to the specific CPU or group of CPUs. This allows applications
to achieve better concurrency, CPU utilization, avoid cache thrashing and
thus improve the performance on SMP systems.
''
The Future.
Besides those achievements, there is more development work ongoing,
and a number of items were presented for review and comment the
past week, which will have further impact on NetBSD's performace
on multicore and SMP machines:
- A scheduler is responsible for distributing workdload on CPUs,
and besides the 4BSD scheduler, a more modern "M2"-scheduler was
recently added to NetBSD, see above. Parts of that scheduler were
now suggested to be included in the general scheduling framework.
That way, the 4BSD scheduler gets processor affinity (so threads /
processes keep stuck to a single CPU and thus reduce cache misses
when migrating between CPUs/cores).
With other changes surrounding this, NetBSD-current beats
FreeBSD 7.0 and all earlier NetBSD releases when running build.sh
(i.e. compiling the whole system) on a 8-core machine. In the image,
small values mean less time for the build, and are thus good.
I find the results impressive.
For more information, see
Andrew's posting to tech-kern.
- Reader/writer locks
are a locking primitive used to allow multiple readers, but to
block them if one or more processes want to write to a ressource.
Those locks are used in the NetBSD kernel, see the
rwlock(9) manpage.
In order to further optimize the performance of the
rwlock primitives, a few optimizations were
suggested by Andrew Doran
which reduces the build time on an 8-cpu machine by 4%:
``There is less idle time during the build because the windows where
a rwlock can be held but the owner is not running is reduced''.
- Another optimization was
suggested
which cuts down another 5% of the time for a complete system build
via build.sh on an 8-core machine, this time by replacing a linear
list of locks in the namei cache with a hash table for the locks.
The namei cache helps to speed up translations from a path name
to the corresponding vnodes, see
namei(9).
A call for participation: Benchmark!
I think this is a very long list of changes, which will all be available
in the next major release of NetBSD. Starting now, it would be interesting
to measure and estimate the performance of NetBSD in comparison to
other operating systems that emphasize SMP (but still keep performance
a goal on uniprocessor machines) -- FreeBSD, Linux and Solaris/x86 come
to mind. Possible benchmarks could include simple Bytebench, dhrystone
and Bonnie benchmarks over more complex ones like postmark and database
and webserver benchmarks. If anyone has numbers and/or graphs,
please post them to the tech-perform@NetBSD.org mailing list!
April 09, 2008 01:10 AM
This is not strictly NetBSD-related, but still of interest as
I consider licensing an important topic. Mike 'mishka' Volokhov
wrote me mail to point out that the Cuneiform OCR program was
recently opened under a BSD license. Mike notes that according to
the Cuneiform Forum (russian language),
the license for the Puma OCR core was chosen for three reasons:
- the BSD license allows to use the same core in other commercial products of
Cognitive Technologies
- the BSD license matches research and educational purposes so as it gives
"more freedom", as it was outspoken by developer company
- other companies can use the OCR engine in their commercial projects
If you ever need to
convince your PHB
to use the BSD license, there's one more example for you, now. Thanks Mike!
April 09, 2008 12:20 AM
AsiaBSDCon 2008
was held in March 2008 in Tokyo, Japan. There werea number of
interesting
papers and talks, and a number of them had a
focus on NetBSD:
- Christoph Badura: Gaols - Implementing Jails Under the kauth Frameworki (paper)
- Yuji IMAI, Takahiro KUROSAWA, Koichi SUZUKI, Eiichi MURAMOTO, Katsuomi HAMAJIMA, Hajimu UMEMOTO, and Nobuo KAWAGUTI: BSD implementations of XCAST6 (paper)
- Antti Kantee: Send and Receive of File System Protocols: Userspace Approach With puffs (paper)
- Kristaps Džonsons: Logical Resource Isolation in the NetBSD Kernel (paper)
- Alistair Crooks: A Portable iSCSI Initiator (paper)
- Jörg Sonnenberger, Jared D. McNeill: Sleeping Beauty---NetBSD on Modern Laptops(slides, paper)
April 09, 2008 12:12 AM
April 06, 2008
Joel Carnat pointed me
over at the OpenBSD lists, on which a discussion on how
to get your employer to understand and possble switch operating
systems. I guess the matter at fact is also of importance to NetBSD,
and there are a number of items that apply to NetBSD as well,
just in case you are looking how to convince your boss to drop
that OpenBSD^WLinux box.
Nick Holland has
posted a number of items which were edited here, see the link for
full information:
- Respect the work that has come before you.
- Prove to them that you know what you are doing on OTHER things.
Give them reason to trust your judgment and quality of work.
- Prove to them that you can (and do) document the systems you are
responsible for.
- Point out the relative "unknownness" of various products already
in your environment.
- Point out that people who know NetBSD may not be falling out of
trees, people who REALLY know Linux, Solaris, Cisco, Juniper, EMC,
Xiotech, Windows, etc. WELL are not common, either.
- Show how easy it is to BUILD your own experts.
- Point out that there are a lot of people LOOKING for
experts in these "industry standard" systems, and they are not
finding good ones.
- Demonstrate, don't talk.
- Hook your co-workers.
- Solve real problems with NetBSD.
- Document your systems REALLY WELL.
- Your documentation should include the things your boss is afraid
of, such as what happens if you vanish and no one else has the root
password.
- Make sure the solution does not tie them to you.
- Design your system right. Keep it simple, reliable,
maintainable, documented and make sure it can survive past you.
Also, "Matt" adds a number of tricks on how to convince your boss.
Abbreviated strongly here as well, see
Matt's posting for the full version with all the
details:
- TRICK 1: Expensive beats free
- TRICK 2: Fear beats comfortable with what we have
- TRICK 3: Trustworthy beats unknown
- TRICK 4: Being cool beats missing the boat
- TRICK 5: Action beats promise
- TRICK 6: Having toys beats 'not interesting'
While the mails were written with OpenBSD in mind, I think much
of them apply to NetBSD as well. I'm not sure I agree 100%
with all things said, but it's definitely a very good approach
that more people should take! Send your
testimonials
about how your company switched to NetBSD to www @ NetBSD . org
(feel free to put me on CC :-).
April 06, 2008 01:33 AM
April 05, 2008
Yesterday night, I got back from the "<a href="http://www.iesmirabent.com/jornadas/index2.html">I Jornadas Tecnológicas Isla Cristina</a>", a small technological conference organized at Isla Cristina, a little town in Huelva, Spain.<div><br /></div><div>The main organizers were the teachers of a local technical school (the IES Padre José Miravent), and they invited me to give a talk about NetBSD development. I will <a href="http://www.netbsd.org/gallery/presentations/">publish the slides</a> soon, but I have to warn you that you will not like the source format, aka PowerPoint. Being part of the university personnel, I was given a copy of Office 2008 for Mac and I wanted to give it a serious try before judging it. It is certainly more powerful (or easy to use) than OpenOffice Impress, but it is also a lot slower; I don't know what they have done there, but the application feels really really sluggish.</div><div><br /></div><div>Anyway, back to the point of the conference. It has been great and surpassed all the expectations I had. The organization was excellent, the people was very nice, the food was (very) abundant and the talks were interesting (except for a couple of exceptions). What else could you ask for?</div><div><br /></div><div>Just as a point of fact, there were around 300 registered people, and I guess around 100 of them came to my talk (it was first hour in the morning); that's a lot more public than I have ever had before, and it was a really exciting thing. I hope the listeners enjoyed it as much as I did.</div><div><br /></div><div>The only thing I regret was not staying there one more day (after the conference) so I could go around the town and take some cool photos. Maybe next year :-) Ah, speaking of next year: if you get invited to give a talk, don't think twice and accept the offer!</div></content>
by Julio M. Merino Vidal at April 05, 2008 09:48 PM
April 01, 2008
Leo Lundgren from the swedish
netbsd.se /
pkgsrc.se
crew has notified me that they have massively revamped
their pkgsrc website, and are asking for tester. The new
site can be found at
test.pkgsrc.se.
The list of changes as outlined
in the forum
are:
- Database backend has moved from MySQL to PostgreSQL
- A more accurate database schema
- Support for branches
- CVS commits
- Search function has been improved
- Watch list feature is improved, you can now upload your `pkg_info` and for example have a watch list per server
- Word watch: Add custom words to look for in the cvs commits, and get notified when a match is found
- Support for virtual categories
Fredrik Carlsson also encourages users in the forum:
``
We practically vacuum pkgsrc for information, but not everything is presented on the web pages. If you have ideas on what should be visible or how it should look, put a post here or email us. We are very flexible at this point and would like help presenting the information.''
April 01, 2008 11:24 PM
March 30, 2008
I recently went from this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xLbGV919cEE/R-_dnI6W8FI/AAAAAAAAAD4/gbW-pWJPsFg/s1600-h/Old+keyboard.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xLbGV919cEE/R-_dnI6W8FI/AAAAAAAAAD4/gbW-pWJPsFg/s400/Old+keyboard.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5183605360603623506" /></a><br />To this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xLbGV919cEE/R-_dqI6W8GI/AAAAAAAAAEA/biht1jJVfCQ/s1600-h/New+keyboard.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xLbGV919cEE/R-_dqI6W8GI/AAAAAAAAAEA/biht1jJVfCQ/s400/New+keyboard.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5183605412143231074" /></a><br />The reason for the change was that the old keyboard was not comfortable any more after around two years of usage. I think that the old keyboard model (in general, not the specific one I had) developed problems after some months of intensive use: its keys lost the smooth pressure feeling they once had. (Maybe adding some kind of oil beneath them might fix this problem, though, as the keys can be easily detached from the keyboard.) Due to that, it was becoming extremely hard to type on that keyboard without mistakes. Plus I have lately got used to laptop-style keyboards: short and soft keys.<div><br />The new keyboard model feels nicely so far. It surely is basically a desktop-sized laptop keyboard, as its keys are very short and soft. But overall I like how I type on it, and my error ratio has lowered back to almost zero again :-) If you are dubious about buying this keyboard, give it a try!</div></content>
by Julio M. Merino Vidal at March 30, 2008 06:48 PM
March 28, 2008
<div xmlns="http://www.w3.org/1999/xhtml">
Here's most of the stuff that I obtained lately in Philadelphia.<br>
<br>
<div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-philly_loot.jpg" width="550" height="413" alt="loot"><div class="imgtitle">DVDs, Oreos, Kahlua Especial, M&Ms</div></div><br>
<div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-philly_chewinggum.jpg" width="550" height="278" alt="chewing gum"><div class="imgtitle">the chewing gum close up</div></div><br>
</div>
</content>
by Hendrik Scholz at March 28, 2008 06:48 PM
March 22, 2008
I had been running Fedora 8 for a long while on my PlayStation 3, but I got sick every time I had to run a <tt>yum update</tt>: that process was very slow. Furthermore, I prefer Debian as a Linux distribution due to its administration utilities and strong policies, so I thought to give it a second chance on my PS3. Second? Yes, I already installed it a while ago, but given that the Cell SDK is only packaged for Fedora made me switch. Anyway, as I'm not doing as much Cell development as I thought at home, I don't care any more and want to install something I'll enjoy. Eventually that'll be NetBSD...<br /><br />So I installed Debian 4.0 using the <a href="http://www.keshi.org/moin/PS3/Debian/Installer">experimental installer</a>. The process went flawlessly, but I chose to do manual partitioning: I created a 1GB partition for swap as <tt>/dev/ps3da1</tt> and a 9GB ext3 partition for the root file system as <tt>/dev/ps3da2</tt>, in that order. Then, after installation, I was greeted by an unbootable system: for some reason, kboot failed to mount <tt>/dev/ps3da2</tt> as its root file system and hence it couldn't parse its <tt>kboot.conf</tt>. Salvaging that situation was easy though: just mount that file system by hand, check the contents of <tt>/etc/kboot.conf</tt> and manually enter the command on the command line.<br /><br />But why was that failing? I already found this problem some months ago with the first attempt at installing Debian. And, for what is worth, things worked fine in Fedora 8, and it had the boot loader configuration files in the same place. After Googling a bit I found no answer, so I opted to read kboot's <tt>init</tt> code. And there was the explanation: when looking for a root file system, it checks if the file system is marked as active and skips it if not.<br /><br />The solution was to install the <tt>pmac-fdisk</tt> package under Debian, access the partition table of <tt>/dev/ps3d</tt>, mark <tt>/dev/ps3da2</tt> as active, save the changes and reboot to see the system boot automatically.</content>
by Julio M. Merino Vidal at March 22, 2008 03:48 PM
March 20, 2008
Unpacking the box, installing PC-BSD
March 20, 2008 12:48 AM
March 19, 2008
Google has launched the <a href="http://code.google.com/soc/2008/">Summer of Code</a> program once again this year, and <a href="http://www.netbsd.org/">NetBSD</a> is a mentoring organization for the fourth time as <a href="http://mail-index.netbsd.org/netbsd-announce/2008/03/18/msg000014.html">announced in a netbsd-announce post</a>. Unless things go very wrong in the following days, I will not take part this year as a <i>student</i> because I will be intering at Google SRE during the Summer!<br /><br />However, I will try to become a mentor for the "<a href="http://www.netbsd.org/contrib/soc-projects.html#convert-regress-to-atf">Convert all remaining regression tests to ATF</a>" project. If you are looking for some interesting idea to apply for, this is a good one! Why?<br /><ul><li>It will let you get into NetBSD internals in almost all areas of the system: you'll need to understand how the source tree is organized, how to add new components to it (because tests are almost in all aspects regular programs), how the current pieces of the system interact with each other...<br /></li><li>You will need to gain knowledge in some areas (such as the kernel or the libraries) to be able to port tests from the old framework (if it deserves that name ;-) to the new one and, if you are really up to it, even add new tests for functionality that is currently uncovered by the test suite. But adding new tests is something you will not be required to do, because the sole task of migrating the existing ones is a huge task already.<br /></li><li>Get involved in <a href="http://www.netbsd.org/%7Ejmmv/atf/">ATF</a>'s development because, as you study the existing test cases and their requirements, you will most likely find that it lacks some important functionality to make things really straightforward.</li><li>And, of course, make a unvaluable contribution to the NetBSD operating system. Having a public test suite with high coverage means that the system will gain quality. Yes, you will most likely uncover bugs in many areas of the system and give them enough exposure so that someone else may fix them.</li></ul>Note that this project is really a Summer of <i>Code</i> project. It does not have a long design phase on its own so, once you have got used to the system and ATF, you'll just code and immediately make useful contributions. In the past, projects that had a heavy design phase involved were not good because, in the end, the student did not finish the code on time.<br /><br />So... don't hesitate to apply! I'm looking forward to see your applications for this project :-)</content>
by Julio M. Merino Vidal at March 19, 2008 11:48 AM
March 17, 2008
The GeForce 8600 GT with two monitors
March 17, 2008 12:48 AM
March 16, 2008
<div xmlns="http://www.w3.org/1999/xhtml">
People are wondering why they are losing money online ... I needed to look something up and went to Amex to <em>register</em> my card. I was prompted with the following dialog:<br>
<br>
<div class="imgcontainer"><img src="http://www.wormulon.net/blogimages/2008/2008-03-amex-account.png" width="550" height="131" alt="Amex Account creation"><div class="imgtitle">Amex online account creation</div></div><br>
<br>
Here is the fine print:<br>
<blockquote>Your User ID should contain 5 to 20 characters . at least one letter (not case sensitive) and contain no spaces or special characters (e.g. &, >, *, $, @)</blockquote><br>
<blockquote>Your Password should contain 6 to 8 characters . at least one letter and one number (not case sensitive), contain no spaces or special characters (e.g. &, >, *, $, @) and be different from your User ID.</blockquote><br>
<br>
The user names and passwords are not case sensitive and the amount of special characters is severely limited. I wonder how often people break into third party accounts simply due to the fact that it is easy to guess passwords. And American Express is supposed to be good as these things as people move millions of dollars through them on a daily basis. </div>
</content>
by Hendrik Scholz at March 16, 2008 06:48 PM
February 28, 2008
A long while ago &mdash; just before buying the MacBook Pro &mdash; I already <a href="http://julipedia.blogspot.com/2006/12/software-bloat.html">complained about software bloat</a>. A year and two months later, it is time to complain again.<br /><br />I am thinking on renewing my MacBook Pro assuming I can sell this one for a good price. The reasons for this are to get slightly better hardware (more disk, better GPU and maybe 4GB of RAM) and software updates. The problem is: if I am able to find a buyer, I will be left without a computer for some days, and that's not a good scenario. I certainly don't want to order the new one without being certain that I will be paid enough for the current one.<br /><br />So yesterday I started assembling some old components I had lying around aiming at having an old but functional computer to work with. But today I realized that I also had the PlayStation 3 with Fedora 8 already installed, and that it'd be enough to use as a desktop for a week or so. I had trimmed down the installation to the bare minimum so that it'd boot as fast as possible and to leave free resources for testing Cell-related stuff. But if I wanted to use the PS3 as a desktop, I needed, for example, GNOME.<br /><br />Ew. Doing a <tt>yum groupinstall "GNOME Desktop Environment"</tt> took quite a while, and not because of the network connection. But even if we leave that aside, starting the environment was painful. <i>Really</i> painful. And Mono was not there, at all! It is amazing how unusable the desktop is with "only" 256MB of RAM; the machine is constantly going to swap, and the disk being slow does not help either. I still remember the days when 256MB was a lot, and desktop machines were snappy enough with only half of that, or even less.<br /><br />OK, so GNOME is a lot for 256MB of RAM. I am now writing this from the PS3 itself running WindowMaker. Which unfortunately does not solve all the problems &mdash; and the biggest one is that it is not a desktop environment. Firefox also requires lots of resources to start, and doing something else in the background still makes the machine use swap. (Note that I have disabled almost all of the system services enabled by default in Fedora, including SELinux.)<br /><br />If I finally sell my MBP, this will certainly be enough for a few days... but it's a pity to see how unusable it is. (Yeah, by today's standards, the PS3 is extremely short on RAM, I know, but GNOME used to run quite well with this amount of RAM just a few years ago.)</content>
by Julio M. Merino Vidal at February 28, 2008 10:48 PM
February 24, 2008
One of the things I miss a lot when writing the C-only code bits of ATF is an easy way to raise and handle errors. In C++, the normal control flow of the execution is not disturbed by error handling because any part of the code is free to notify error conditions by means of exceptions. Unfortunately, C has no such mechanism, so errors must be handled explicitly.<br /><br />At the very beginning I just made functions return integers indicating error codes and reusing the standard error codes of the C library. However, that turned out to be too simple for my needs and, depending on the return value of a function (not an integer), was not easily applicable.<br /><br />What I ended up doing was defining a new type, <tt>atf_error_t</tt>, which must be returned by all functions that can raise errors. This type is a pointer to a memory region that can vary in contents (and size) depending on the error raised by the code. For example, if the error comes from libc, I mux the original error code and an informative message into the error type so that the original, non-mangled information is available to the caller; or, if the error is caused by the user's misuse of the application, I simply return a string that contains the reason for the failure. The error structure contains a type field that the receiver can query to know which specific information is available and, based on that, cast down the structure to the specific type that contains detailed information. Yes, this is very similar to how you work with exceptions.<br /><br />In the case of no errors, a null pointer is returned. This way checking for an error condition is just a simple pointer check, which is no more expensive than an integer check. However, handling error conditions is more costly, but given that these are rare, it is certainly not a problem.<br /><br />What I don't like too much of this approach is that any other return value must be returned as an output parameter, which makes things a bit confusing. Furthermore, robust code ends up cluttered with error checks all around given that virtually any call to the library can produce an error somewhere. This, together with the lack of RAII modeling, complicates error handling a lot. But I can't think of any other way that could be simpler but, at the same time, as flexible as this one. Ideas? :P<br /><br />More details are available in the <a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/1dc8887d38a3001e5465217991b054a4dab3a253/atf-c/error.h">atf-c/error.h</a> and <a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/1dc8887d38a3001e5465217991b054a4dab3a253/atf-c/error.c">atf-c/error.c</a> files.</content>
by Julio M. Merino Vidal at February 24, 2008 06:48 PM
February 18, 2008
I have spent part of past week and this whole weekend working on a C-only library for ATF test programs. An extremely exhausting task. However, I wanted to do it because there is reluctancy in NetBSD to write test programs in C++, which is understandable, and delaying it more would have made things worse in the future. I found this situation myself some days ago when writing tests for very low level stuff; using C++ there felt clunky, but it was still possible of course.<br /><br />I have had to reimplement lots of stuff that are given for-free in any other, <i>higher</i>-level (not necessarily <i>high</i>-level) language. This includes, for example, a "class" to deal with dynamic strings, another one for dynamic linked lists and iterators, a way to propagate errors until the point where they can be managed... and I have spent quite a bit of time debugging crashes due to memory management bugs, something that I rarely encountered in the C++ version.<br /><br />However, the new interface is, I believe, quite neat. This is not because of the language per se, but because the C++ interface has grown "incorrectly". It was the first code in the project and it shows. The C version has been written from the ground up with all the requirements known beforehand, so it is cleaner. This will surely help in cleaning up the C++ version later on, which cannot die anyway.<br /><br />The code for this interface is in a new branch, <a href="http://mtn-host.prjek.net/viewmtn/atf/branch/changes/org.NetBSD.atf.src.c">org.NetBSD.atf.src.c</a>, and will hopefully make it to ATF 0.5: it still lacks a lot of features, hence why it is not on mainline. Ah, the joys of a distributed VCS: I have been able to develop this experiment locally and privately until it was decent enough to be published, and now it is online with all history available!<br /><br />From now on C++ use will be restricted to the ATF tools inside ATF itself, and to those users who want to use it in their projects. Test cases will be written using the C library except for those that unit-test C++ code.</content>
by Julio M. Merino Vidal at February 18, 2008 10:48 AM
February 08, 2008
This does not build. Can you guess why? Without testing it?<pre>std::set&lt; int &gt; numbers;<br /><br />for (int i = 0; i &lt; 10; i++)<br /> numbers.insert(i);<br /><br />for (std::set&lt; int &gt;::iterator iter = numbers.begin();<br /> iter != numbers.end(); iter++) {<br /> int&amp; i = *iter;<br /> i++;<br />}</pre><b>Update (23:40)</b>: John gave a correct answer in the comments.</content>
by Julio M. Merino Vidal at February 08, 2008 04:48 PM
February 05, 2008
My monitor is back from service! It was picked up on <a href="http://julipedia.blogspot.com/2008/01/benq-rma-adventures-part-1.html">January 30th</a>, and it has been returned today just after 6 days (4 work days). Note that the technical service's office was located in Portugal, just at the opposite side of the peninsula.<br /><br />And best of all, the monitor is fixed: firmware updated, so I can now disable the Overscan feature and get a perfect 1:1 pixel mapping on the HDMI input. Kudos to the BenQ RMA service for this quick and effective service!</content>
by Julio M. Merino Vidal at February 05, 2008 05:48 PM
February 04, 2008
I'm pleased to announce that the fourth release of <a href="http://www.NetBSD.org/~jmmv/atf/">ATF</a>, 0.4, just saw the light. The NetBSD source tree has also been updated to reflect this new release.<br /><br />For more details please <a href="http://www.NetBSD.org/~jmmv/atf/news.html#20080204-atf-0-4-released">see the announcement</a>.</content>
by Julio M. Merino Vidal at February 04, 2008 08:48 PM
I'm about to publish the 0.4 release of <a href="http://www.NetBSD.org/~jmmv/atf/">ATF</a>. It has been delayed more than I wanted due to the difficulty in getting time-limited test cases working and due to my laziness in testing the final tarball in multiple operating systems (because I knew I'd have to fight portability problems).<br /><br />But finally, this weekend I have been setting up a rather-automated build farm at home, which is composed so far of 13 systems. Yes, 13! But do I use so much machines? Of course not! Ah, the joys of virtualization.<br /><br />What I have done is set up a virtual machine for each system I want to test using <a href="http://www.vmware.com/download/fusion/">VMware Fusion</a>. If possible, I configure both 32-bit and 64-bit versions of the same system, because different problems can arise in them. Each virtual machine has a <tt>builder</tt> user, and that user is configured to allow passwordless SSH logins by using a private key. It also has full sudo access to the machine, so that it can issue root-only tests and can shutdown the virtual machine. And about the software it has, I only need a C++ compiler, the make tool and pkg-config.<br /><br />Then I have a script that, for a given virtual machine:<ol><li>Starts the virtual machine.</li><li>Copies the distfile inside the virtual machine.</li><li>Unpacks the distfile.</li><li>Configures the sources.</li></li>Builds the sources.</li><li>Installs the results.</li><li>Runs the build-time tests.</li><li>Runs the install-time tests as a regular user.</li><li>Runs the install-time tests as root.</li><li>Powers down the virtual machine.</li></ol>Ideally I should also run some different combinations of compilers inside each system (for example, SUNpro and GCC in Solaris) and make tools (BSD make and GNU make). I'm also considering in replacing some of the steps above by a simple <tt>make distcheck</tt>.<br /><br />I take a log of the whole process for later manual inspection. This way I can simply call this script for all the virtual machines I have and get the results of all the tests for all the platforms. I still need to do some manual testing in non-virtual machines such as in my PS3 or in Mac OS X, but these are minor (but yes, they should also be automated).<br /><br />Starting and stopping the virtual machines is what was trickiest, but in the end I got it working. Now I would like to adapt the code to work with other virtual machines (Parallels and qemu), clean it up and publish it somehow. Parts of it do certainly belong inside ATF (such as the formatting of all logs into HTML for later publication on a web server), and I hope they will make it into the next release.<br /><br />For the curious, I currently have virtual machines for: Debian 4.0r2, Fedora 8, FreeBSD 6.3, NetBSD-current, openSUSE 10.2, Solaris Express Developer Edition 2007/09 and Ubuntu Server 7.10. All of them have 32-bit and 64-bit variants except for Solaris, which is only 64-bit. Setting all of them up manually was quite a tedious and boring process. And the testing process is slow. Each system takes around 10 minutes to run through the whole "start, do stuff, stop" process, and SXDE almost doubles that. In total, more than 2 hours to do all the testing. Argh, an 8-way Mac Pro could be so sweet now :-)</content>
by Julio M. Merino Vidal at February 04, 2008 02:48 PM
February 03, 2008
I have always thought that unlink(2) was meant to remove files only but, yesterday, SunOS (<a href="http://developers.sun.com/sxde/">SXDE</a> 200709) proved my wrong. I was sanity-checking the source tree for the imminent <a href="http://www.NetBSD.org/~jmmv/atf/">ATF</a> 0.4 release under this platform, which is always scary, and the tests for the <tt>atf::fs::remove</tt> function were failing &mdash; only when run as root.<br /><br />The failure happened in the cleanup phase of the test case, in which ATF attempts to recursively remove the temporary work directory. When it attempted to remove one of the directories inside it, it failed with a ENOENT message, which in SunOS may mean that the directory is not empty. Strangely, when inspecting the left-over work tree, that directory was indeed empty and it could not be removed with <tt>rm -rf</tt> nor with <tt>rmdir</tt>.<br /><br />The manual page for <tt>unlink(2)</tt> finally gave me the clue of what was happening:<blockquote>If the path argument is a directory and the filesystem supports unlink() and unlinkat() on directories, the directory is unlinked from its parent with no cleanup being performed. In UFS, the disconnected directory will be found the next time the filesystem is checked with fsck(1M). The unlink() and unlinkat() functions will not fail simply because a directory is not empty. The user with appropriate privileges can orphan a non-empty directory without generating an error message.</blockquote>The solution was easy: as my custom <tt>remove</tt> function is supposed to remove files only, I added a check before the call to <tt>unlink(2)</tt> to ensure that the path name does not point to a directory. Not the prettiest possibility (because it is subject to race-conditions even though it is not critical), but it works.</content>
by Julio M. Merino Vidal at February 03, 2008 04:48 PM
February 02, 2008
You can't imagine how happy I was today when I read the <a href="http://www.linuxtechdaily.com/2008/02/kde-4-developers-an-interview-with-sebastian-kugler/">interview with KDE 4's developer Sebastian Kuegler</a>. Question 6 asks him:<blockquote>6. Are there any misconceptions about KDE 4 you see regularly and would like to address?</blockquote>And around the middle of the answer, he says:<blockquote>Frankly, I don’t like the whole concept of the “Linux Desktop”. Linux is really just a kernel, and in this case very much a buzzword. Having to mention Linux (which is just a technical implementation detail of a desktop system) suggests that something is wrong. Should it matter to the user if he runs Linux or BSD on his machine? Not at all. It only matters because things just don’t work so well (mostly caused by to driver problems, often a matter of ignorance on some vendor’s side).</blockquote>Thanks Sebastian. I couldn't have said it better.<br /><br />What virtually all application developers are targeting —or should be targeting— is KDE <i>or</i> GNOME. These are the development platforms; i.e. what provide the libraries and services required for easy development and deployment. It doesn't make any sense to "write a graphical application for Linux", because Linux has no standard graphical interface (unless you mean the framebuffer!) and, again, Linux is just a kernel.<div><br /></div><div>I <i>think</i> I have already blogged about the problems of software redistribution under Linux... will look for that post and, if it is not there, it is worth a future entry.</div></content>
by Julio M. Merino Vidal at February 02, 2008 02:48 PM
January 31, 2008
I'm happy to have been part of the "<a href="http://arstechnica.com/articles/culture/netbsd4-interview.ars">Waving the flag: NetBSD developers speak about version 4.0</a>" interview. Enjoy!</content>
by Julio M. Merino Vidal at January 31, 2008 12:48 PM
January 30, 2008
A couple of weeks ago, I called BenQ's RMA service to ask for a fix for my new FP241W Z. I have problems with the HDMI digital input: the monitor crops part of the image on each side and makes it slightly bigger to fill all the screen. It turns out that there is a firmware upgrade for this specific monitor that adds a configuration option to turn off overscan, which effectively should resolve this problem. So I called them to get the firmware in my monitor updated.<div><br /></div><div>The operator was very polite and helpful. After asking for the details of the monitor and the problem I was having, she confirmed that, effectively, the problem I was describing was due to an outdated firmware and that they'd be fixing it for free. I gave the necessary data and then &mdash;after 20-something minutes&mdash; they told me that a carrier would come to my location and pick the monitor up for delivery to the technical center. But first, such carrier had to contact me to set up a date for the hand out.</div><div><br /></div><div>Two weeks after, no one had called me nor sent me any email. In fact, they told me that I should be receiving an email, so I simply waited patiently because, when it comes to email, things can be very slow. I even thought that I might have deleted that message as spam. But two weeks was already too much.</div><div><br /></div><div>So yesterday's afternoon, I called the RMA service again and explained the situation. They promised to fix it that evening. Effectively, they did. They called me this morning asking for another detail about the monitor, so I assumed things were being dealt with.</div><div><br /></div><div>And this afternoon, at around 15.30, I received a funny SMS from the carrier that had to pick the monitor up. They basically said "We will come to pick up the package on the 30th (aka today). It will be between 9.00 to 12.00 or between 12.00 to 19.00.". Great! Could it be more inaccurate please? First of all, the mentioned times cover practically all day. Second, most of that time had already been skipped. And third, I was getting the notice the same day they were coming. I immediately rang home and asked my mother if somebody had gone there. As they had not shown up yet, I returned home quickly, packed the monitor up in a hurry and soon after, the carrier reached home. Just a matter of luck I was able to deal with this on time!</div><div><br /></div><div>This isn't really a critique; I just want to explain how the process is going as things progress. The BenQ service has been very responsive and polite until now, and I think I can only blame the carrier service. Let's hope things move fast and well from now on.</div></content>
by Julio M. Merino Vidal at January 30, 2008 11:48 PM
January 18, 2008
Here is a request for a feature I have not yet seen in any virtualization application &mdash; used <a href="http://www.parallels.com/en/products/desktop/">Parallels Desktop</a> 2, <a href="http://www.vmware.com/mac">VMware Fusion</a> 1.1 and another product I can't speak of yet &mdash; that I'd <span class="Apple-style-span" style="font-style: italic;">love</span> to have. It'd make things so much easier for me... So here is an open request just in case one of the developers of free alternatives (e.g. <a href="http://www.virtualbox.org/">VirtualBox</a>) reads it and decides to get ahead of the competence by implementing it.<div><br /></div><div>Before explaining my feature request, let's consider you have a server on your network on which you run multiple virtual machines (VMs) for whatever purpose. These machines are exported to the network using <span class="Apple-style-span" style="font-style: italic;">bridged networking</span> so that other computers in the network can access them transparently as if they were physical computers. To make this setup trivial, you have a DHCP server on your network that hands out static IP addresses to these virtual servers, and you also have a DNS server that maps these addresses to static names. This way, users on your network can access the virtual machines by simply spelling out their host names.<br /><div><br /></div><div>Now let's move to the laptop world where you are connected to different networks all the time (e.g. at home or at work) or no network at all. Here I will assume that you will want to access the VMs exclusively from your laptop. In this case, you should not use bridged networking because you'd be exporting all your virtual machines to the possibly untrusted network. <i>And</i> you cannot rely on the external DHCP nor DNS servers to deal with static IP addresses nor host names for you because in many situations you have no control over them.</div><div><br /></div><div>Your best bet is to use <i>shared networking</i> to configure your VMs (or <i>host-only networking</i> if they needn't access the outside world). But if you do so, your VMs will get random IP addresses because you have no control over the DHCP sever bundled into the virtualization application. And as a result of this, you cannot assign host names to them. As a workaround, you can manually configure each operating system running on a VM to have a static IP (bypassing DHCP), then add an entry in the host's <tt>/etc/hosts</tt> file to assign a host name to the guest OS and at last add an entry in the guest's <tt>/etc/hosts</tt> file to assign a host name to the host OS. Which is painful.</div><div><br /></div><div>In my idea world, the virtualization applications could have the ability to fine-tune the bundled DHCP server to hand out specific addresses to the virtual machines (VMs) and a way to specify DNS host names for them, all from the configuration interface and without having to touch any configuration file in the host system (nor guest, for that matter). E.g. add a little configuration box for the IP address and host name of the guest OS alongside the box that already exists to configure the MAC address. Then have the bundled DHCP server hand out the appropriate entries to the guests, add an entry to the host's <tt>/etc/hosts</tt> and provide a virtual DNS server to the guests so that they can resolve each other's names.</div><div><br /></div><div>An use case for this? I have two VMs that I carry around in my MacBook Pro that I use very frequently and that I do not want to expose to the outside network at all. One is a Fedora 8 installation and the other a NetBSD one. I start them up from the graphical interface and then access them through SSH exclusively. But in order to reliably use SSH, I need to do the above manual steps to set up a host name for them, or otherwise using SSH is a pain.</div><div><br /></div><div>I am also trying to set up an automatic build farm for ATF (composed probably of 10-15 VMs) and the need to set all these details manually is extremely boring.</div></div></content>
by Julio M. Merino Vidal at January 18, 2008 03:48 PM
January 17, 2008
Now that you know the procedure to <a href="http://julipedia.blogspot.com/2008/01/how-to-kill-tree-of-processes.html">kill a process tree</a>, I can explain how the automated tests for this feature work. In fact, writing the tests is what was harder due to all the race conditions that popped up and due to my rusty knowledge of tree algorithms.<div><br /><div><div>Basically, the testing procedure works like this:</div><div><ol><li>Spawn a complete tree of processes based on a configurable degree D and height H.</li><li>Make each child tell the root process its PID so that the root process can have a list of all its children, be them direct or indirect, for control purposes.</li><li>Wait until all children have reported their PID and are ready to be killed.</li><li>Execute the kill-tree algorithm on the root process.</li><li>Wait until the children have died.</li><li>Check that none of the PIDs gathered in point 2 are still alive (which could be, but reparented to init(8) if they were not properly killed). If some are, the recursive kill failed.</li></ol><div>The tricky parts were 3 and 5.</div><div><br /></div><div>In point 3, we have to wait until all children have been spawned. Doing so for direct children is easy because we spawned them, but indirect ones are a bit more difficult. What I do is create a pipe for each of the children that will be spawned (because given D and H I can know how many nodes there will be) and then each child uses the appropriate pipe to report its PID to the parent when it has finished initialization and thus is ready to be safely killed. The parent then just reads from all the pipes and gets all the PIDs.</div><div><br /></div><div>But what do I mean with <span class="Apple-style-span" style="font-style: italic;">safely killed</span>? Preliminary versions of the code just ran through the children's code and then exited, leaving them in zombie status. This worked in some situations but broke in others. I had to change this to block all children in a wait loop and then, when killed, take care to do a correct wait for all of its respective children, if any. This made sure that all children remained valid until the attempt to kill them.</div><div><br /></div><div>In point 5, we have to wait until the direct children have returned so that we can be sure that the signals were delivered and processed before attempting to see if there is any process left. (Yes, if the algorithm fails to kill them we will be stalled at that point.) Given that each children can be safely killed as explained above, this wait will do a recursive wait along all the process tree making sure that everything is cleaned up before we do the final checks for non-killed PIDs.</div><div><br /></div><div>This all sounds very simple and, in fact, looking at the <a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/03762dcd82a309a543d67178f61d53c0a1bed985/tests/atf/units/t_procs.cpp">final code</a> it is. But it certainly was not easy at all to write, basically because the code grew in ugly ways and the algorithms were much more complex than they ought to be.</div></div></div></div></content>
by Julio M. Merino Vidal at January 17, 2008 03:49 PM
January 16, 2008
<a href="http://julipedia.blogspot.com/2008/01/implementing-timeouts-for-test-cases.html">Yesterday</a> I mentioned the need for a way to kill a tree of processes in order to effectively implement timeouts for test cases. Let's see how the <a href="http://mtn-host.prjek.net/viewmtn/atf/revision/file/f51b4c7f694ff98e0e303743797eb3cccb6f9ea4/atf/procs.cpp">current algorithm</a> in ATF works:<br /><div><ol><li>The root process is stopped by sending a SIGSTOP to it so that it cannot spawn any new children while being processed.</li><li>Get the whole list of active processes and filter them to only get those that are direct children of the root process.</li><li>Iterate over all the direct children and repeat from 1, recursively.</li><li>Send the real desired signal (typically SIGTERM) to the root process.</li></ol><div>There are two major caveats in the above algorithm. First, point 2. There is no standard way to get the list of processes of a Unix system, so I have had to code three different implementations so far for this trivial requirement: one for NetBSD's KVM, one for Mac OS X's sysctl kern.proc node and one for Linux's procfs.</div><div><br /></div><div>Then, and the worst one, comes in point 4. Some systems (Linux and Mac OS X so far) do not seem to allow one to send a signal to a stopped process. Well, strictly speaking they allow it, but the second signal seems to be simply ignored whereas under NetBSD the process' execution is resumed and the signal is delivered. I do not know which behavior is right.</div><div><br /></div><div>If we cannot send the signal to the stopped process, we can run into a race condition: we have to wake it up by sending a SIGCONT and then deliver the signal, but in between these events the process may have spawned new children that we are not aware of.</div><div><br /></div><div><i>Still</i>, being able to send a signal to a stopped process does not completely resolve the race condition. If we are sending a signal that the user can reprogram (such as SIGTERM), that process may fork another one before exiting, and thus we'd not kill this one. But... well... this is impossible to resolve with the existing kernel APIs as far as I can tell.</div><div><br /></div><div>One solution to this problem is killing a timed-out test by using SIGKILL instead of SIGTERM. SIGKILL could work on any case because means <i>die immediately</i>, without giving a chance to the process to mess with it. Therefore SIGCONT would not be needed in any case &mash;because you can simply kill a stopped process and it will die immediately as expected&mdash; and the process would not have a chance to spawn any more children after it had been stopped.</div><div><br /></div><div>Blah, after writing this I wonder why I went with all the complexity of dealing with signals that are not SIGKILL... say over-engineering if you want...</div></div></content>
by Julio M. Merino Vidal at January 16, 2008 11:48 PM
January 15, 2008
One of the pending to-do entries for ATF 0.4 is (was, mostly) the ability to define a timeout for a test case after which it is forcibly terminated. The idea behind this feature is to prevent broken tests from stalling the whole test suite run, something that is already needed by the factor(6) tests in NetBSD. Given that I want to release this version past weekend, I decided to work on this instead of delaying it because... you know, this sounds pretty simple, right? Hah!<div><br /></div><div>What I did first was to implement this feature for C++ test programs and added tests for it. So far, so good. It effectively was easy to do: just program an alarm in the test program driver and, when it fires, kill the subprocess that is executing the current test case. Then log an appropriate error message.</div><div><br /></div><div>The tests for this feature deserve some explanation. What I do is: program a timeout and then make the test case's body sleep for a period of time. I try different values for the two timers and if the timeout is smaller than the sleeping period, then the test must fail or otherwise there is a problem.</div><div><br /></div><div>The next step was to implement this in the shell interface, and this is where things got tricky. I did a quick and dirty implementation, and it seemed to make the same tests I added for the C++ interface pass. However, when running the bootstrap testsuite, it got stalled at the cleanup part. Upon further investigation, I noticed that there were quite a lot of sleep(1) processes running when the testsuite was stalled, and killing them explicitly let the process continue. You probably noticed were the problem was already.</div><div><br /></div><div>When writing a shell program, you are forking and executing external utilities constantly, and sleep(1) is one of them. It turns out that in my specific test case, the shell interpreter is just waiting for the sleep subprocess to finish (whereas in the C++ version everything happens in a single process). And, <span class="Apple-style-span" style="font-style: italic;">killing a process does not kill its children</span>. There you go. My driver was just killing the main process of the test case, but not everything else that was running; hence, it did not die as expected, and things got stalled until the subprocesses also died.</div><div><br /></div><div>Solving this was the fun part. The only effective way to make this work is to kill the test case's main process <i>and</i>, recursively, all of its children. But killing a tree of processes is not an easy thing to do: there is no system interface to do it, there is no portable interface to get a list of children and I'm yet unsure if this can be done without race conditions. I reserve the explanation of the recursive-kill algorithm I'm using for a future post.</div><div><br /></div><div>After some days of work, I've got this working under Mac OS X and also have got automated tests to ensure that it effectively works (which were the hardest part by far). But as I foresaw, it fails miserably under NetBSD: the build was broken, which was easy to fix, but now it also fails at runtime, something that I have not diagnosed yet. Aah, the joys of Unix...<br /></div></content>
by Julio M. Merino Vidal at January 15, 2008 05:48 PM
January 06, 2008
As I already<a href="http://julipedia.blogspot.com/2008/01/24-widescreen-comparison.html"></a> <a href="http://julipedia.blogspot.com/2007/12/choosing-24-widescreen-monitor.html">mentioned</a>, I was interested in buying a 24" widescreen monitor for both my laptop and PlayStation 3. I considered many <a href="http://julipedia.blogspot.com/2008/01/24-widescreen-comparison.html">different options</a> but, based on my requirements (1920x1200, 1:1 pixel mapping, dual HDMI/DVI-D inputs), I ended up choosing the <a href="http://benq.com/products/LCD/?product=839">BenQ FP241W Z</a> (yeah, did it <a href="http://julipedia.blogspot.com/2006/01/got-benq-fp202w-flat-panel.html">again</a>).<br /><br />This thing is gorgeous as the following photos will show you. Lots of real screen state to work — the ability to have many different, non-overlapping editors and terminals open at once is very convenient — and great to watch videos. But it has a "small" problem (I <i>want</i> it fixed!) that I'll explain after them...<br /><br />So here are two photos of the MacBook Pro working in clamshell mode, connected to the new monitor:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xLbGV919cEE/R4E5K7J2CFI/AAAAAAAAACo/PrOoJec4t9g/s1600-h/IMG_0662.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_xLbGV919cEE/R4E5K7J2CFI/AAAAAAAAACo/PrOoJec4t9g/s400/IMG_0662.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462308529014866" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xLbGV919cEE/R4E5LbJ2CGI/AAAAAAAAACw/toLugzTs9AE/s1600-h/IMG_0660.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_xLbGV919cEE/R4E5LbJ2CGI/AAAAAAAAACw/toLugzTs9AE/s400/IMG_0660.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462317118949474" border="0" /></a><br />And here are a couple of images showing the PlayStation 3 in action:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xLbGV919cEE/R4E5L7J2CHI/AAAAAAAAAC4/DX6X2cRqokY/s1600-h/IMG_0657.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_xLbGV919cEE/R4E5L7J2CHI/AAAAAAAAAC4/DX6X2cRqokY/s400/IMG_0657.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462325708884082" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_xLbGV919cEE/R4E5MbJ2CII/AAAAAAAAADA/6RoUILr60Zc/s1600-h/IMG_0664.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_xLbGV919cEE/R4E5MbJ2CII/AAAAAAAAADA/6RoUILr60Zc/s400/IMG_0664.JPG" alt="" id="BLOGGER_PHOTO_ID_5152462334298818690" border="0" /></a><br />OK, this last image is the one I wanted to discuss. It is showing the "PlayStation Store", accessible directly from an option in the XMB interface. It is easy to see that the image is cropped on the four sides: some letters are cut, and the top and bottom buttons are shown extremely close to the screen border's. This is not what I expected.<br /><br />Even more, booting Linux reports that the framebuffer's dimensions are 1688x964 even though the screen says it is working in 1080p mode (1920x1080). If I force Linux to go to full 1080p, then the terminal is also cropped on the four sides, making it unusable. According to <a href="http://episteme.arstechnica.com/eve/forums/a/tpc/f/67909965/m/963009859831">this thread</a>, this is caused by the monitor assuming that the HDMI input has overscan hence it crops the image. (Note that the image is being slightly <i>scaled up</i> to fill the whole screen, because the visible area is smaller than the displayed one! And I certainly don't want that.)<br /><br />It looks like that a firmware update released on May 2007 adds an Overscan tunable option on the settings, which allows you to disable this feature and thus get the whole image. But unfortunately my monitor was manufactured on April 2007, so it has the old firmware. Grr. Will call BenQ support tomorrow and see if they can do anything about it (I guess they'll be able to do a firmware upgrade, but they may need to take the monitor for several days^Wweeks.). Otherwise I may end up returning this unit. Heck, I searched 1:1 pixel mapping like crazy and now I find this other, unexpected problem. No way.<br /><br />Other than that, great display. Now, if only I had a Mac Pro to accompany it... ;-)</content>
by Julio M. Merino Vidal at January 06, 2008 08:48 PM
January 05, 2008
As promised in the previous post <a href="http://julipedia.blogspot.com/2007/12/choosing-24-widescreen-monitor.html">Choosing a 24" widescreen monitor</a>, here comes the brief analysis I did before deciding which monitor to buy. Refer to the <a href="http://www.netbsd.org/%7Ejmmv/julipedia/20080105-24-widescreens.xhtml">comparison table</a> (or the <a href="http://www.NetBSD.org/~jmmv/julipedia/20080105-24-widescreens.pdf">PDF version</a> if the XHTML one does not work for you) for more details. I'm linking this externally because putting it here, in this width-limited page, would be unsuitable.<br /><br />The data in that table has been taken from the official vendor pages when possible, even though they failed to list some of the details. I tried to look for the missing ones around the network and came up with, I think, fairly trustable data. But of course some of them may be wrong.<br /><br />By the way, be specially careful when comparing the <i>Contrast ratio</i> and <i>Response time</i> fields. Each vendor likes to advertise these in different ways, so you cannot really compare them without knowing what each value really means (and I don't, because they generally don't specify it).<br /><br />Anyway, even the table is not complete (some fields are marked with N/A because I could not easily came up with an answer), I hope it will be useful to some of you.</content>
by Julio M. Merino Vidal at January 05, 2008 09:48 AM
January 03, 2008
Once again, CVS shows its weaknesses. Last night I committed a fix to pkgsrc and soon after I noticed I had a prior e-mail by Alistair, a member of PMC and the one responsible for the preparation of pkgsrc releases, asking developers to stop committing to the tree because he was going to tag it for pkgsrc-2007Q4. It turns out that my fix did not get into the branch because the directory it went in (<tt>devel/monotone</tt>) had already been tagged. Had I committed the fix to, say, <tt>x11/zenity</tt>, it would have gone into the branch. Or worse, had I committed a fix that spanned multiple files, some of them would have got to the branch and others not.<br /><br />So what, am I supposed to read e-mail before I can do a commit? What if the mail does not arrive on time? What if the commit had affected many more directories and some of them had already been tagged but some not?<br /><br />This is just another example of CVS showing its limitations and stupidities. Given that each file's history is stored independently — i.e. there are no global changesets — the only way to tag the repository is to go file by file and set the tag on each. And then, you need to check which revision of each file is the one to be tagged. I do not know why is this so slow even when you do a <tt>rtag</tt> (so the one doing the work is the server alone) on HEAD, but in the case of pkgsrc this process took more than 2 hours!<br /><br />OK, OK, I'm hiding the truth. The thing is there are some ways around this: for example, using the <tt>tag</tt> command will tag the exact revisions you have in your working copy, or passing a date to <tt>rtag</tt> will tag the repository based on the provided timestamp. This way you ensure that the tagging process will be consistent even if people keep committing changes to the tree. <i>However</i>, the first of these commands will require a lot of network communication and the second will put a lot of stress on the server, making the command even slower (or that's what I've been told).<br /><br />In virtually all other version control systems that support changesets, a tag is just a name for a given revision identifier. And defining this tag is a trivial and quick process. Well, Subversion is rather different because tags are just copies of the tree, but I think that they deal with these efficiently.</content>
by Julio M. Merino Vidal at January 03, 2008 08:48 PM
January 01, 2008
It is a new year again.<br /><br />Let's see if I can, at least, accomplish one goal: I should try to not delay stuff as much as I have been doing until now. This specially refers to replying to some e-mails and working on some stuff I once started but have not had the time to finish (bad excuses, I know). The clearest example that comes to my mind is Boost.Process, for which I have got many status-requests already... but there are also some tiny pet projects such as genfb support for NetBSD/mac68k and witheouts for tmpfs. Of course, there also is the conversion of more NetBSD tests to ATF.<br /><br />But, and this is a big but, the first semester of the year will probably keep me extremely busy with my Ph.D. courses... and, to make things worse, when I get home in the evening I'm so tired that I don't want to do more work. Will have to try to organize tasks a bit better so that there is time for everything.<br /><br />Anyway, happy new year to everyone! And thanks to your continuous visits and support, this is the 400th post :-)</content>
by Julio M. Merino Vidal at January 01, 2008 10:48 AM
December 17, 2007
PC-BSD has a lot going for it
December 17, 2007 04:48 AM
December 09, 2007
POP implies one computer. IMAP allows many.
December 09, 2007 01:48 AM
September 10, 2007
When creating more than one jail, these shortcuts might help
September 10, 2007 04:48 AM
August 06, 2007
August 01, 2007
Things are getting tight and slow...
August 01, 2007 01:48 PM
July 09, 2007
Setting up amavisd and clamav on FreeBSD
July 09, 2007 04:48 AM
Spam is nasty. pf is good.
July 09, 2007 04:48 AM
March 08, 2007
Jails are great. Here's my recipie
March 08, 2007 05:48 AM