People often tell me that star is hard to use, because it is so different from 
Gnu tar. In order to allow an unbiased discussion, I prepared this comparison. 
It contains some hints for people (currently using Gnu tar) who like to like to 
switch to 'star'. In addition, there is a list of features missing in Gnu tar
and a smaller list of features missing in star. A list of incompatible options
found in Gnu tar helps to find out which options from Gnu tar should be avoided.
As I am not sure whether I will have the time to keep it in sync with future 
changes, it is valid for December 1st 2001.

First some background notes. Star is several years older than Gnu tar and most
of the options that have different meanings in gnu tar have been in use with
star since 1985. This is about two years before the first versions of Gnu tar
(called PD tar or SUG tar in 1987) have been published. Do not expect that the
meaning of those options will be changed in star in the future.

Star tries to be as compatible as possible with the BSD tar implementation
from 1982 and with the POSIX standard. Of course, it implements a lot of
enhancements. Gnu tar in former times (in 1987 when being called
PD tar / SUG tar) has been compatible to the BSD tar implementation but this
changed in 1989 when FSF adopted the program as Gnu tar. Gnu tar is not
very POSIX compliant. The command line options from Gnu tar do not follow
the SUSv2 (UNIS-98) and the archive format does not follow POSIX.1-1988.

If you know the standard and thus know where Gnu tar is not standard compliant,
it is easy to switch between Gnu tar and star. If you only use the basic
functionality, everything should be exactly the same. If you don't know the 
standard and only know Gnu tar you may get into some problems but this is
really a Gnu tar problem.

Now let us compare functionality and options. Star has a lot of functions
that are usually invisible to the user but make the daily use much easier:

-	A FIFO allows to keeps the tape streaming. This gives you faster backups
	than you can achieve with other tar implementations. If the size
	of the filesystem is > 1 GByte, star is even faster than ufsdump.

-	A powerful pattern matcher for a convenient user interface (see manual
	page for more details) to archive/extract a subset of files.

-	A sophisticated diff with a user tailorable interface for comparing
	tar archives against file trees. This is one of the most interesting parts
	of the star implementation.

-	deals with all 3 times, it stores/restores all 3 times of a file
	(even creation time)
	On Solaris, it may reset access time after doing the backup without
	clobbering the ctime.

-	Star does not clobber files by default. More recent copies on disk will
	not be clobbered from tape. This may be the main advantage over other
	tar implementations; it allows automatically repairing of corruptions
	after a crash & fsck (Check for differences after doing this with the
	diff option).

-	Star does automatic byte swapping if needed. Star automatically detects
	swapped archives and transparently reads them the right way.

-	Star has automatic compression detection. In the recent case when star
	is used to unpack compressed files containing tar archives, star will
	transparently detect and call the right decompression program.

-	Star has automatic archive format detection. Star automatically detects
	several common archive formats and adopts to them. Supported archive
	types are:

		tar		old tar format
		star		old star format from 1985
		gnutar		gnu tar format
		ustar		standard tar (ieee POSIX 1003.1-1988) format
		xstar		extended standard tar format
		xustar		extended standard tar format without tar signature
		exustar		extended standard tar format without tar signature (always x-header)
		pax		extended (ieee POSIX 1003.1-2001) standard tar format
		suntar		Sun's extended pre-POSIX.1-2001 Solaris 7/8 tar format

-	Star is fully ANSI/Posix 1003.1 compatible. See README.otherbugs for a
	complete description of bugs found in other tar implementations.

-	Support for the new POSIX.1-2001 extended tar format. This new tar 
	format allows to archive many new things in a standard compliant way.
	These things are currently are implemented in Gnu tar in a proprietary 
	way and have in former times been implemented in a proprietary way in 
	star. To give an example, the most interesting features that are now 
	handled in a standard compliant way are filenames without name len 
	limitation and file size without the old 8 GB tar limitation.
	An interesting aspect of the new extended header format is that the
	extended header format itself is extensible without limitation. Star
	uses this extension format to archive Access Control Lists and file
	flags from BSD-4.4 and Linux.


Comparing command line options from star and gnutar is a more complex task:

-	Star has 91 base Options

-	Gnu tar has 70 base Options

-	Star has    45 Options that are missing in Gnu tar

-	Gnu tar has 21 Options that are missing in star

	-	9 of the Gnu tar options are not needed or do not make sense to implement
	-	2 of the Gnu tar options are considered to be of low importance
	-	6 of the Gnu tar options are nice to have
	-	2 of the missing options are halfway ready in star
	-	4 of the missing options are needed and important

Only two of the Gnu tar options may be knock off criteria (incremental backup
and "ignore failed reads") the latter may not work correctly in Gnu tar so only
the incremental backup remains as important missing point.

The implementation of incremental backup features for star did already start.
The incremental backup will most likely be fully usable in 2002 with star-1.5.
The archive format used with incremental backups in star will be more compact
and more effective than the archive format used by Gnu tar. While Gnu tar 
needs to archive the complete directory tree, if a directory has been renamed,
and the complete file content for files that have been renamed, star will only
archive empty renamed directories and the meta data of renamed files.

/*--------------------------------------------------------------------------*/
As a hint for readers to the star manual page, star uses getargs() to parse
the command line. Getargs() is much more flexible than getopt() and is even
older than getopt(). Getargs() implements the following features:

-	All single char boolean options and all single char increment type
	options may be combined into a single string starting with a single
	dash (-).

-	getargs() has a compatibility mode for GNU programs and allows to
	preceede long options with a double dash (--) instead of the usual
	single dash (-).

-	All options that take an argument are listed in the man page for
	better readability of the manual as:
	
		option=arg

	but the following variants may appear in the actual command line:

		option=arg
		option= arg
		-option=arg
		-option= arg
		-optionarg
		-option arg

-	A separate double dash (--) may preceede any argument that looks like
	an option and specifies that the immediately following argument is
	a file type argument.

/*--------------------------------------------------------------------------*/

STAR Option	Description							Gnu tar equiv.	Remarks
===========	===========							=============	===================

Cmds:

-c/-u/-r	create/update/replace named files to tape			-c/-u/-r	identical
-x/-t		extract/list  named files from tape				-x/-t		identical
-n		trace named files from tape					--missing--
-diff		diff archive against file system (see -xhelp)			--diff		Gnu --diff is not as useful
												as star's -diff

Options:

-help		print this help							--help		close to identical
-xhelp		print extended help						see above
-version									--version	close to identical
-debug										--missing--
-silent		no not print informational messages				--missing--
blocks=#,b=#	set blocking factor to #x512 Bytes (default 20)			-b		close to identical
file=nm,f=nm	use 'nm' as tape instead of stdin/stdout			-f		close to identical
-T		use $TAPE as tape instead of stdin/stdout			--missing--
-fifo/-no-fifo	use/don't use a fifo to optimize data flow from/to tape		--missing--
-shm		use SysV shared memory for fifo					--missing--
-v		be verbose							-v		identical
-block-number	print the block numbers where the TAR headers start		--block-number	Not working in Gnu tar!
-tpath		use with -t to list path names only				--missing--
H=header	generate 'header' type archive (see H=help)			--missing--
C=dir		perform a chdir to 'dir' before storing next file		-C		identical
-z		pipe input/output through gzip, does not work on tapes		-z		identical
-bz		pipe input/output through bzip2, does not work on tapes		-j		identical
-B		perform multiple reads (needed on pipes)			-B		identical
-i		ignore checksum errors						-i		similar
-d		do not store/create directories					--missing--
-m		do not restore access and modification time			-m		identical
-o,-nochown	do not restore owner and group					--no-same-owner	similar
-a,-atime	reset access time after storing file				--atime-preserve partial!!!
-p		restore filemodes of directories				-p		similar ?
-l		do not print a message if not all links are dumped		--missing--
-link-dirs	look for hard linked directories in create mode			--missing--
-dump		experimental option for incremental dumps (more ino metadata)	--missing--
-meta		experimental option to use inode metadata only			--missing--
-h,-L		follow symbolic links as if they were files			-h		identical
-D		do not descend directories					--no-recursion	identical
-M		do not descend mounting points					-l		GNU -l violates POSIX
-I,-w		do interactive creation/extraction/renaming			-w		partial
-O		be compatible to old tar (except for checksum bug)		-o		GNU -o violates POSIX
-P		last record may be partial (useful on cartridge tapes)		--missing--
-S		do not store/create special files				--missing--
-F,-FF,-FFF,...	do not store/create SCCS/RCS, core and object files		--missing--
-U		restore files unconditionally					--missing--
diffopts=optlst	comma separated list of diffopts (see diffopts=help)		--missing--
-not,-V		use those files which do not match pattern			--missing--
VOLHDR=name	use name to generate a volume header				-V name		similar
-xdir		extract dir even if the current is never			--missing--
-dirmode	write directories after the files they contain			--missing--
-keep-old-files,-k	keep existing files					-k		similar
-refresh-old-files	refresh existing files, don't create new files		--overwrite	????
-refresh									--overwrite	????
-/		don't strip leading '/'s from file names			-P		similar
list=name	read filenames from named file					-I --files-from=NAME	similar
-dodesc		do descend directories found in a list= file			--missing--
pattern=p,pat=p	set matching pattern						PATTERN		not as mighty as star
maxsize=#	do not store file if it is bigger than # kBytes			--missing--
newer=name	store only files which are newer than 'name'			--never=DATE	no find compat with GNUtar!
new-volume-script=script	call 'scipt' at end of each volume		--new-volume-script=script identical
-ctime		use ctime for newer= option					--newer-mtime	invers idea to star
-nodump		do not dump files that have the nodump flag set			--missing--
-acl		handle access control list					--missing--
bs=#		set (output) block size to #					-b		de-facto missing
fs=#		set fifo size to #						--missing--
tsize=#		set tape volume size to # 512 byte blocks			-L		x 1024 bytes
-qic24		set tape volume size to 61440 kBytes				--missing--
-qic120		set tape volume size to 128000 kBytes				--missing--
-qic150		set tape volume size to 153600 kBytes				--missing--
-qic250		set tape volume size to 256000 kBytes				--missing--
-nowarn		do not print warning messages					--missing--
-time		print timing info						--totals	only partially
-no-statistics	do not print statistics						--missing--	always
-fifostats	print fifo statistics						--missing--
-numeric	don't use user/group name from tape				--numeric-owner	identical
-newest		find newest file on tape					--missing--
-newest-file	find newest regular file on tape				--missing--
-hpdev		use HP's non POSIX compliant method to store dev numbers	--missing--
-modebits	include all 16 bits from stat.st_mode (violates POSIX-1003.1)	--missing--
-copylinks	Copy hard and symlinks rather than linking			--missing--
-hardlinks	Extract symlinks as hardlinks					--missing--
-symlinks	Extract hardlinks as symlinks					--missing--
-signed-checksum	use signed chars to calculate checksum			--missing--
-sparse		handle file with holes effectively on store/create		-S --sparse	similar
-force-hole	try to extract all files with holes				--missing--
-to-stdout	extract files to stdout						-O --to-stdout
-wready		wait for tape drive to become ready				--missing--
-force-remove	force to remove non writable files on extraction		--missing--
-ask-remove	ask to remove non writable files on extraction			--missing--
-remove-first	remove files before extraction					--unlink-first
-remove-recursive	remove files recursive					--recursive-unlink not yet ready in star
-onull,-nullout	simulate creating an achive to compute the size			-f/dev/null	in GNUtar worse than star (cannot do performance tests)

/*--------------------------------------------------------------------------*/
Gnu tar options that (in the single char variant) are incompatible:

BsS	-F, --info-script=FILE		run script at end of each tape (implies -M)
s	-L, --tape-length=NUM		change tape after writing NUM x 1024 bytes
s	-M, --multi-volume		create/list/extract multi-volume archive
s	-O, --to-stdout			extract files to standard output
sS (+)	-P, --absolute-names		don't strip leading `/'s from file names
s	-S, --sparse			handle sparse files efficiently
s	-T, -I, --files-from=NAME	get names to extract or create from file NAME
s	-U, --unlink-first		remove each file prior to extracting over it
s	-V, --label=NAME		create archive with volume name NAME
s	-d, --diff, --compare		find differences between archive and file system
sP	-l, --one-file-system		stay in local file system when creating archive
sP	-o, --old-archive, --portability write a V7 format archive

B	Incompatible with BSD tar
s	Incompatible with star
S	Incompatible with Sun's/SVr4 tar
P	Incompatible with POSIX

+)	This option is the only option where star deviates from other tar 
	implementations, but as there is no other nice way to have an option to 
	specify that the last record should be partial and the star option -/ 
	is easy to remember as well as -P for Partial record is I see no need 
	to change star.

/*--------------------------------------------------------------------------*/
Options only found in GNUtar:

GNUtar option		GNUtar description					Star remarks
====================	==================================================	=======================================
Main operation mode:
  -A, --catenate          append tar files to an archive			low importance
      --delete            delete from the archive (not on mag tapes!)		low importance

Operation modifiers:
  -W, --verify               attempt to verify the archive after writing it	not needed (may be implemented via rewind
										and -diff in star)

      --remove-files         remove files after adding them to the archive	not needed
  -U, --unlink-first         remove each file prior to extracting over it	halfway ready
      --recursive-unlink     empty hierarchies prior to extracting directory	halfway ready

  -g, --listed-incremental=FILE							--needed-- and important
                             handle new GNU-format incremental backup
      --ignore-failed-read   do not exit with nonzero on unreadable files	--needed-- and important

Handling of file attributes:
      --owner=NAME             force NAME as owner for added files		--nice-to-have--
      --group=NAME             force NAME as group for added files		--nice-to-have--
      --mode=CHANGES           force (symbolic) mode CHANGES for added files	--nice-to-have--
      --no-same-owner          extract files as yourself			not needed
  -s, --same-order             sort names to extract to match archive		????


Device selection and switching:
      --rsh-command=COMMAND      use remote COMMAND instead of rsh		makes no sense (rsh is slow)
  -[0-7][lmh]                    specify drive and density			not needed
  -M, --multi-volume             create/list/extract multi-volume archive	--needed-- and important
      --volno-file=FILE          use/update the volume number in FILE		--needed-- and important

Archive format selection:
S  -V, --label=NAME                   create archive with volume name NAME
              PATTERN                at list/extract time, a globbing PATTERN
  -Z, --compress, --uncompress       filter the archive through compress	not needed (compress is rarey used)
      --use-compress-program=PROG    filter through PROG (must accept -d)	not needed (rarely used)

Local file selection:
      --null                   -T reads null-terminated names, disable -C	???
  -X, --exclude-from=FILE      exclude globbing patterns listed in FILE		--nice to have--
  -K, --starting-file=NAME     begin at file NAME in the archive		--nice to have--
      --backup[=CONTROL]       backup before removal, choose version control	not needed
      --suffix=SUFFIX          backup before removal, override usual suffix	not needed

Informative output:
      --checkpoint      print directory names while reading the archive		--nice to have--