about summary refs log tree commit diff
path: root/doc/upgrade.html
blob: 2a93362a52fa437c081fa9effe3f94711fecc6c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Language" content="en" />
    <title>skalibs: how to upgrade</title>
    <meta name="Description" content="skalibs: How to upgrade" />
    <meta name="Keywords" content="skalibs installation upgrade" />
    <!-- <link rel="stylesheet" type="text/css" href="//skarnet.org/default.css" /> -->
  </head>
<body>

<p>
<a href="index.html">skalibs</a><br />
<a href="//skarnet.org/software/">Software</a><br />
<a href="//skarnet.org/">skarnet.org</a>
</p>

<h2> in 2.14.3.0 </h2>

<ul>
 <li> <tt>UNIXMESSAGE_MAXFDS</tt> decreased to 253. </li>
 <li> New <tt>mininetstring_read()</tt> function. (Was
previously removed in 2.7.0.0.) </li>
</ul>

<h2> in 2.14.2.0 </h2>

<ul>
 <li> New <tt>skalibs/gol.h</tt> header, implementing long options. </li>
 <li> New <tt>mkptemp3()</tt> function. </li>
</ul>

<h2> in 2.14.1.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.14.1.0 </h2>

<ul>
 <li> New <tt>ip46.h</tt> macros:
<tt>socket_sendnb46_g()</tt> and <tt>socket_recvnb46_g()</tt> </li>
</ul>

<h2> in 2.14.0.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.14.0.0 </h2>

<ul>
 <li> New selfpipe accessor function: <tt>selfpipe_fd()</tt> </li>
 <li> New djbunix functions: <tt>slurpn()</tt>, <tt>openslurpnclose()</tt> </li>
 <li> <tt>slurp</tt> and <tt>openslurpclose</tt> are now macros </tt> </li>
 <li> New cdb functions: <tt>cdb_hashv()</tt>, <tt>cdbmake_addv()</tt> </li>
 <li> New <tt>cspawn</tt> function, for posix_spawn/fork unification </li>
 <li> <tt>child_spawn</tt> functions are now declared in <tt>cspawn.h</tt> </li>
 <li> New sysdeps for posix_spawn options and more </li>
 <li> <tt>case_lowerb() and friends now use ctype.h functions, supporting locale
if it is declared in the application. </li>
 <li> <tt>case_str()</tt> removed, strcasestr() fallback implementation added </li>
</ul>

<h2> in 2.13.1.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.13.1.0 </h2>

<ul>
 <li> New macro: <tt>SKALIBS_PATH_MAX</tt> </li>
</ul>

<h2> in 2.13.0.0 </h2>

<ul>
 <li> New functions: <tt>buffer_timed_put()</tt>, <tt>buffer_timed_puts()</tt>. </li>
</ul>

<h2> in 2.12.0.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.12.0.0 </h2>

<ul>
 <li> <tt>random_init()</tt> and <tt>random_finish()</tt> removed,
as well as <tt>random_char()</tt>. </li>
 <li> <tt>random_string()</tt> renamed to <tt>random_buf()</tt>. </li>
 <li> random functions now have an <tt>early</tt> version, to use when
randomness is required before the generator can be seeded (i.e. in
programs running in the very early boot). </li>
 <li> New <a href="libstddjb/djbunix.html">djbunix</a> functions:
<tt>waitn_posix()</tt>, <tt>waitn_reap_posix()</tt> </li>
</ul>

<h2> in 2.11.2.0 </h2>

<ul>
 <li> User-provided CPPFLAGS, CFLAGS and LDFLAGS are now honored during
sysdeps autodetection. </li>
 <li> <tt>envdir_internal()</tt> now has a SKALIBS_ENVDIR_NOCLAMP option
allowing reading of unlimited-size variables. </li>
</ul>

<h2> in 2.11.1.0 </h2>

<ul>
 <li> <tt>fd_close()</tt> now chooses to adapt to Linux's
<a href="https://man7.org/linux/man-pages/man2/close.2.html">close()</a>
behaviour (closing the fd on EINTR) over the HP-UX one (not closing it).
Destructors like
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html">close()</a>
being allowed to fail has always been a mistake in the specification and a
programming nightmare, making it impossible to behave correctly on all
systems, but apparently standardization efforts are on the way and the Linux
behaviour seems to be the chosen one. </li>
 <li> New <tt>unix-transactional.h</tt> function: <tt>opendir_at</tt>. </li>
</ul>

<h2> in 2.11.0.0 </h2>

<ul>
 <li> <tt>libbiguint</tt> removed. </li>
 <li> Obsolete <tt>skalibs/environ.h</tt> and <tt>skalibs/getpeereid.h</tt> headers removed. </li>
 <li> rc4 and md5 functions removed. </li>
 <li> iobuffer removed. <tt>fd_cat()</tt> and <tt>fd_catn()</tt> changed signatures. </li>
 <li> All <tt>*_t</tt> types renamed without the <tt>_t</tt> suffix,
in order to preserve POSIX namespace. </li>
 <li> <tt>subgetopt()</tt> renamed to <tt>lgetopt()</tt>. </li>
 <li> All signal functions entirely reworked; cruft removed. </li>
 <li> <tt>skalibs/cdb_make.h</tt> renamed to <tt>skalibs/cdbmake.h</tt>;
 <tt>cdbmake</tt> functions now return 1 on success and 0 on failure. </li>
 <li> <tt>skalibs/cdb.h</tt> redesigned to remove reader state from the
cdb structure itself. </li>
 <li> The unsafe <tt>cdb_successor()</tt> API has been removed.
 <li> New <tt>skalibs/posixplz.h</tt> function: munmap_void()</tt>. </li>
</ul>

<h2> in 2.10.0.3 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.10.0.2 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.10.0.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.10.0.0 </h2>

<ul>
 <li> New <tt>openc_*</tt> functions, which are O_CLOEXEC versions of the
<a href="libstddjb/djbunix.html">djbunix.h</a> <tt>open_*</tt> functions. </li>
 <li> New <tt>ipc_bind_reuse_lock()</tt> function, which takes a lock before
deleting a Unix domain socket. The <tt>ipc_bind_reuse()</tt> function now
uses it, so it won't unconditionally clobber sockets in the filesystem anymore. </li>
 <li> Complete revamping of the pathexec functions, see <tt>exec.h</tt>. </li>
 <li> Revamping of the locking functions, see
<a href="libstddjb/djbunix.html>djbunix.h</a>. </li>
 <li> Use of standard O_NONBLOCK and O_CLOEXEC (defined in
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/fcntl.h.html"></a>
instead of adhoc <tt>DJBUNIX_FLAG_NB</tt> and <tt>DJBUNIX_FLAG_COE</tt>. </li>
 <li>Better header separation; <tt>webipc.h</tt> removed (stuff moved to
<tt>socket.h</tt>). </li>
 <li> New <tt>mkptemp2()</tt> function, creating a fifo with a templated name
and an option field for O_NONBLOCK and O_CLOEXEC. </li>
 <li> New sysdep: <tt>chroot</tt>, testing whether the system has the
<tt>chroot()</tt> function. </li>
</ul>

<h2> in 2.9.3.0 </h2>

<ul>
 <li> New function: <tt>stralloc_readyplus_tuned()</tt> </li>
</ul>

<h2> in 2.9.2.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.9.2.0 </h2>

<ul>
 <li> New functions: <tt>bigkv_*</tt> </li>
</ul>

<h2> in 2.9.1.0 </h2>

<ul>
 <li> skalibs now works on GNU Hurd without patches. </li>
 <li> New function: <tt>path_canonicalize</tt> </li>
</ul>

<h2> in 2.9.0.0 </h2>

<ul>
 <li> Formatting and scanning functions and macros have been refactored. </li>
 <li> The configure script now emulates autotools-created configure scripts
more closely. In particular, it's now possible to declare an out-of-path
compiler in <tt>CC</tt>. </li>
 <li> <tt>tain_*</tt> functions dealing with wall clocks and stopwatches
have been refactored. The <tt>--enable-clock</tt> and <tt>--enable-monotonic</tt>
configure switches have been removed. <tt>tain_now()</tt> can now be told at run
time to use a wall clock (default, or via <tt>tain_now_set_wallclock()</tt>) or a
stopwatch (via <tt>tain_now_set_stopwatch()</tt>), instead of it being fixed at
build time. </li>
 <li> Cross-compilation has been made a lot easier, by removing the need to
provide a whole sysdeps directory anymore. Only a few sysdeps - the ones that
need code execution on the target to be autodetected - have to be provided manually,
via a <tt>--with-sysdep-<em>K</em>=<em>V</em></tt> option to configure.
Currently, that means one: <tt>--with-sysdep-devurandom=yes</tt> or
<tt>--with-sysdep-devurandom=no</tt>. </li>
</ul>

<h2> in 2.8.1.0 </h2>

<ul>
 <li> New functions:
  <ul>
   <li> <tt>skalibs_regcomp()</tt>, which accepts empty regexes even
when <a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/regcomp.html">regcomp()</a>
does not (e.g. the BSDs). </li>
  </ul> </li>
</ul>

<h2> in 2.8.0.1 </h2>

<ul>
 <li> Changes to <a href="djbtime.html">skalibs/djbtime.h</a> functions
that produce UTC time: when a leap second is hit, <tt>utc_from_tai()</tt>
now returns 2, and functions writing a <tt>struct tm</tt> put 60 into
the struct's <tt>tm_sec</tt> field.</li>
</ul>

<h2> in 2.8.0.0 </h2>

<ul>
 <li> The avltreeb macros have been removed. Instead, the
<tt>AVLTREEN_DECLARE_AND_INIT()</tt> macro has been added. </li>
 <li> The <tt>mkdir_unique()</tt> function has been removed.
(It duplicated the functionality of the standard <tt>mkdtemp()</tt>
function.) </li>
 <li> New functions: <tt>env_dump()</tt>, <tt>mk?temp()</tt>,
<tt>autosurf()</tt>, <tt>autosurf_name()</tt> </li>
 <li> The ancilautoclose and nbwaitall sysdeps have been removed. </li>
 <li> New header: <tt>skalibs/posixishard.h</tt> </li>
 <li> <tt>libskarnet.a</tt> now builds as PIC by default no matter
the toolchain's settings. Use the <tt>--disable-all-pic</tt> configure
option to build static libraries as non-PIC. </li>
</ul>

<h2> in 2.7.0.0 </h2>

<ul>
 <li> New functions: <tt>ipc_timed_sendv()</tt>, <tt>unlink_void()</tt>,
<tt>skagetln_loose()</tt>, <tt>skagetlnsep_loose()</tt>,
<tt>genset_deepfree()</tt>, <tt>gensetdyn_deepfree()</tt> </li>
 <li> The <a href="libstddjb/djbunix.html">dir_close()</a> function now returns void
and leaves errno unchanged. </li>
 <li> The <tt>absolutepath()</tt> and <tt>sarealpath_tmp()</tt> functions, as well
as the <tt>avl*_deletenode()</tt>, <tt>skalibs/mininetstring.h</tt> and <em>prot</em>
families of functions, have been removed. </li>
 <li> <a href="libstddjb/djbunix.html">skalibs/djbunix.h</a> does not include
<tt>skalibs/env.h</tt> anymore. </li>
</ul>

<h2> in 2.6.4.0 </h2>

<ul>
 <li> New functions: <a href="libstddjb/djbunix.html">execvep_loose()</a>,
<tt>byte_zzero()</tt>, <a href="libstddjb/djbunix.html">openb_read()</a>,
<tt>sig0_scan</tt> </li>
 <li> New family of functions: <a href="libdatastruct/genqdyn.html">skalibs/genqdyn.h</a> </li>
</ul>

<h2> in 2.6.3.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.6.3.0 </h2>

<ul>
 <li> New dir_fd function wrapping dirfd() (Solaris doesn't have dirfd()). </li>
 <li> memmem implementation for platforms that don't provide it. </li>
 <li> memmem wrappers: byte_search, siovec_search. </li>
 <li> New functions: atomic_symlink, skagetlnmaxsep, child_spawn3 </li>
 <li> New header: <tt>skalibs/posixplz.h</tt>. Some header reorganization. </li>
 <li> New family of functions: <tt>skalibs/textmessage.h</tt>, <tt>skalibs/textclient.h</tt> </li>
 <li> <tt>skalibs/environ.h</tt> and <tt>skalibs/getpeereid.h</tt> are now obsolescent. </li>
</ul>

<h2> in 2.6.2.0 </h2>

<ul>
 <li> New functions: access_at(), skaclient_timed_aflush(). </li>
</ul>

<h2> in 2.6.1.0 </h2>

<ul>
 <li> New function: <a href="libstddjb/djbunix.html">lock_unx()</a>. </li>
</ul>

<h2> in 2.6.0.2 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.6.0.1 </h2>

<ul>
 <li> <tt>openwritenclose()</tt> and <tt>openwritevnclose()</tt> now use
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkstemp.html">mkstemp()</a>
instead of relying on an unpredictable name (which required a random
generator to be fully initialized). </li>
</ul>


<h2> in 2.6.0.0 </h2>

<ul>
 <li> New functions: <tt>unixmessage_receiver_hasmsginbuf()</tt>,
<tt>skalibs_setgroups()</tt>, <tt>setgroups_with_egid()</tt>,
<tt>setgroups_and_gid()</tt>. The <tt>setgroups_and_gid()</tt>
function is the one that should be used, if possible: it does the
right thing even on the BSDs. (That's an achievement.) </li>
</ul>

<h2> in 2.5.1.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.5.1.0 </h2>

<ul>
 <li> The <tt>xpathexec_*</tt> family of functions has been added to
<a href="libstddjb/djbunix.html">skalibs/djbunix.h</a>. </li>
</ul>

<h1> What has changed in skalibs </h1>

<h2> in 2.5.0.0 </h2>

<ul>
 <li> Support for old versions of OpenBSD dropped. At least OpenBSD 5.7
and newer are still supported. </li>
 <li> <tt>--enable-replace-libc</tt> compilation flag dropped </li>
 <li> <tt>skalibs/ushort.h</tt>, <tt>skalibs/uint.h</tt> and <tt>skalibs/ulong.h</tt>
removed. <tt>skalibs/types.h</tt> is now a generic header for fmtscan primitives
for various types. </li>
 <li> <tt>uint16</tt>, <tt>uint32</tt> and <tt>uint64</tt> types replaced with POSIX
<tt>uint16_t</tt>, <tt>uint32_t</tt> and <tt>uint64_t</tt>. </li>
 <li> APIs changed across all skalibs functions to support more POSIXly correct
types. Main benefit: correct 64-bit support on 64-bit archs with 32-bit int. </li>
</ul>

<h2> in 2.4.0.2 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.4.0.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.4.0.0 </h2>

<ul>
 <li> More support for advanced fd callbacks in <tt>unixmessage_sender</tt> and <tt>unixconnection</tt>. </li>
 <li> <tt>ipc_timed_send()</tt>, <tt>ipc_timed_recv()</tt> </li>
 <li> rt.lib sysdep removed; spawn.lib and timer.lib sysdeps added </li>
 <li> Leap second for 2016-12-31 23:59:60 UTC added </li>
 <li> Complete <a href="librandom/">librandom</a> rewrite </li>
 <li> <a href="libstddjb/alarm.html">skalibs/alarm.h</a> added </li>
</ul>

<h2> in 2.3.10.0 </h2>

<ul>
 <li> Support for advanced fd callbacks in <tt>unixmessage_sender</tt>. </li>
</ul>

<h2> in 2.3.9.0 </h2>

<ul>
 <li> New functions: <tt>bitarray_firstclear_skip</tt> and
<tt>bitarray_firstset_skip</tt>. </li>
</ul>

<h2> in 2.3.8.3 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.8.2 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.8.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.8.0 </h2>

<ul>
 <li> The <tt>/etc/leapsecs.dat</tt> file is no longer necessary. </li>
</ul>

<h2> in 2.3.7.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.7.0 </h2>

<ul>
 <li> New functions: <tt>atomic_rm_rf()</tt>, <tt>atomic_rm_rf_tmp()</tt>. </li>
</ul>

<h2> in 2.3.6.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.6.0 </h2>

<ul>
 <li> New function: <tt>openreadnclose_nb</tt>. </li>
</ul>

<h2> in 2.3.5.2 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.5.1 </h2>

<ul>
 <li> No functional changes. </li>
</ul>

<h2> in 2.3.5.0 </h2>

<ul>
 <li> New functions: <tt>bitarray_count()</tt>, <tt>openwritevnclose_at()</tt> </li>
</ul>

<h2> in 2.3.4.0 </h2>

<ul>
 <li> New function: <tt>stat_at()</tt> </li>
 <li> The rest of the changes are bugfixes or QoL. </li>
</ul>

<h2> in 2.3.3.0 </h2>

<ul>
 <li> New sha512 functions, see <tt>skalibs/sha512.h</tt> </li>
</ul>

<h2> in 2.3.2.0 </h2>

<ul>
 <li> New macro: <tt>gid0_scan()</tt> </li>
</ul>

<h2> in 2.3.1.3 </h2>

<ul>
 <li> Bugfix release, no functional changes. </li>
</ul>

<h2> in 2.3.1.2 </h2>

<ul>
 <li> The child_spawn* family of functions now resets all signals
to their default values when spawning a program on systems with
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html">posix_spawn()</a>.
This should not change anything - it's just paranoia. </li>
 <li> Minor bugfixes. </li>
</ul>

<h2> in 2.3.1.1 </h2>

<ul>
 <li> Bugfix release, no functional changes. </li>
</ul>

<h2> in 2.3.1.0 </h2>

<ul>
 <li> wait_status() now returns 256 + signal number when WIFSIGNALED(). </li>
 <li> new macro wait_estatus() to get WIFSIGNALED information in an exit code. </li>
 <li> new functions in djbunix.h: hiercopy(), hiercopy_tmp() </li>
</ul>

<h2> in 2.3.0.1 </h2>

<ul>
 <li> wait_status() now returns 256 (instead of 126) when WIFSIGNALED(). </li>
</ul>

<h2> in 2.3.0.0 </h2>

<ul>
 <li> buffer_getvall and buffer_putvall have a different interface. (And now work.) </li>
 <li> buffer_read and buffer_write are now deprecated. </li>
 <li> various siovec additions, such as siovec_trunc </li>
</ul>

<h2> in 2.2.1.0 </h2>

<ul>
 <li> unixconnection added. </li>
 <li> sig_name and sig_number added. </li>
</ul>

<h2> in 2.2.0.0 </h2>

<ul>
 <li> TAI64 and TAI64N conversion functions revisited.
API slightly changed, made more consistent. </li>
</ul>

<h2> in 2.1.0.0 </h2>

<ul>
 <li> unixmessage_drop added, part of unixmessage/skaclient hardening against fd leakage </li>
 <li> unixmessage_sender_flush return code aligned with the convention in the rest of skalibs </li>
 <li> unixmessage_sender_flush now handles short writes </li>
 <li> skaclient_start(_async) prototype changed: now takes an option argument </li>
</ul>

<h2> in 2.0.0.0 </h2>

<ul>
 <li> The packaging system has completely changed. </li>
 <li> Programs should now link with <tt>-lskarnet</tt> followed by the appropriate
sysdeps links. </li>
 <li> No compatibility is ensured. Most APIs haven't changed, but no guarantee
is offered. </li>
 <li> The most important change is probably the disparition of <tt>struct tai</tt>
and <tt>struct taia</tt>, replaced with the <tt>tai_t</tt> and <tt>tain_t</tt>
types. Attosecond precision has been removed - processor speed is almost capped now,
and it looks like nanosecond precision will be enough for the foreseeable future. </li>
 <li> Buffer implementation has changed, and some interfaces too, mainly the
buffer_flush and bufalloc_flush return code. </li>
 <li> skaclient, skalibs' client-server communication suite, has been
entirely reimplemented: it's now using the new "unixmessage" set of primitives
for easier fd-passing. </li>
</ul>

</body>
</html>