
I just found out about Apple's Lossless Codec going open source, so I decided to give it a spin. I'm putting my experience here since ALAC's trac (at least the bug entry form) is down. I submitted a bug about that upstream.
Update: Thanks to Bill Siegrist from Apple for releasing a bugfix on the next morning (hours later... on a Sunday). There is another issue with uploading attachments. Sounds like might be this.
Another update: Issues are now submitted here and here.
The original post was:
The issues that I wanted to submit were:
The license on the frontpage of the website says that it uses the Apache License but it mentions the Apple Public Source License in one part of the source tree:
Apple Public Source License: http://alac.macosforge.org/trac/browser/trunk/codec/APPLE_LICENSE.txt?rev=2
Apache 2 License: http://alac.macosforge.org/trac/browser/trunk/LICENSE?rev=3
The second issue that I had was with building the source. The diff to get it to build on Debian is here.
I first checkout the code from svn:
$ svn co http://svn.macosforge.org/repository/alac/trunk ALAC
Then I compiled the library with `make` and everything went fine until I tried to build the convert-utility.
me@mydomain:~/Projects/ALAC/convert-utility$ make
(cd ../codec; make)
make[1]: Entering directory `/home/me/Projects/ALAC/codec'
make[1]: `libalac.a' is up to date.
make[1]: Leaving directory `/home/me/Projects/ALAC/codec'
g++ -Wall -L../codec -lalac main.o CAFFileALAC.o -o alacconvert
main.o: In function `EncodeALAC(_IO_FILE*, _IO_FILE*, AudioFormatDescription, AudioFormatDescription, int)':
/home/me/Projects/ALAC/convert-utility/main.cpp:400: undefined reference to `ALACEncoder::ALACEncoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:413: undefined reference to `ALACEncoder::GetMagicCookieSize(unsigned int)'
/home/me/Projects/ALAC/convert-utility/main.cpp:415: undefined reference to `ALACEncoder::GetMagicCookie(void*, unsigned int*)'
/home/me/Projects/ALAC/convert-utility/main.cpp:487: undefined reference to `Swap24'
/home/me/Projects/ALAC/convert-utility/main.cpp:472: undefined reference to `Swap16'
/home/me/Projects/ALAC/convert-utility/main.cpp:480: undefined reference to `Swap32'
/home/me/Projects/ALAC/convert-utility/main.cpp:540: undefined reference to `Swap24'
/home/me/Projects/ALAC/convert-utility/main.cpp:525: undefined reference to `Swap16'
/home/me/Projects/ALAC/convert-utility/main.cpp:533: undefined reference to `Swap32'
main.o: In function `DecodeALAC(_IO_FILE*, _IO_FILE*, AudioFormatDescription, AudioFormatDescription, int, unsigned int)':
/home/me/Projects/ALAC/convert-utility/main.cpp:603: undefined reference to `ALACDecoder::ALACDecoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:612: undefined reference to `ALACDecoder::Init(void*, unsigned int)'
/home/me/Projects/ALAC/convert-utility/main.cpp:615: undefined reference to `BitBufferInit'
/home/me/Projects/ALAC/convert-utility/main.cpp:704: undefined reference to `ALACDecoder::~ALACDecoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:665: undefined reference to `ALACDecoder::Decode(BitBuffer*, unsigned char*, unsigned int, unsigned int, unsigned int*)'
/home/me/Projects/ALAC/convert-utility/main.cpp:682: undefined reference to `BitBufferReset'
CAFFileALAC.o: In function `WriteCAFFdescChunk(_IO_FILE*, AudioFormatDescription)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:85: undefined reference to `SwapFloat64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:86: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:87: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:88: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:89: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:90: undefined reference to `Swap32NtoB'
CAFFileALAC.o:/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:91: more undefined references to `Swap32NtoB' follow
CAFFileALAC.o: In function `WriteCAFFpaktChunkHeader(_IO_FILE*, port_CAFPacketTableHeader*, unsigned int)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:167: undefined reference to `Swap64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:168: undefined reference to `Swap64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:169: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:170: undefined reference to `Swap32NtoB'
CAFFileALAC.o: In function `GetCAFFdescFormat(_IO_FILE*, AudioFormatDescription*)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:420: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:421: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:422: undefined reference to `SwapFloat64BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:423: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:424: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:425: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:443: undefined reference to `Swap32BtoN'
collect2: ld returned 1 exit status
make: *** [alacconvert] Error 1
Trivial fix. Here is the diff:
$ svn diff makefile
Index: makefile
===================================================================
--- makefile (revision 3)
+++ makefile (working copy)
@@ -30,7 +30,7 @@
alacconvert: $(OBJS)
(cd $(CODECDIR); $(MAKE))
- $(CC) $(LFLAGS) $(OBJS) -o alacconvert
+ $(CC) $(OBJS) -o alacconvert $(LFLAGS)
main.o : main.cpp
$(CC) -I $(INCLUDES) $(CFLAGS) main.cpp
I'm not sure if I should be doing ifdefs for different OSes (Solaris, AIX etc). They don't publish what *nix platforms they test on.

I just found out about Apple's Lossless Codec going open source, so I decided to give it a spin. I'm putting my experience here since ALAC's trac (at least the bug entry form) is down. I submitted a bug about that upstream.
Update: Thanks to Bill Siegrist from Apple for releasing a bugfix on the next morning (hours later... on a Sunday). There is another issue with uploading attachments. Sounds like might be this.
Another update: Issues are now submitted here and here.
The original post was:
The issues that I wanted to submit were:
The license on the frontpage of the website says that it uses the Apache License but it mentions the Apple Public Source License in one part of the source tree:
Apple Public Source License: http://alac.macosforge.org/trac/browser/trunk/codec/APPLE_LICENSE.txt?rev=2
Apache 2 License: http://alac.macosforge.org/trac/browser/trunk/LICENSE?rev=3
The second issue that I had was with building the source. The diff to get it to build on Debian is here.
I first checkout the code from svn:
$ svn co http://svn.macosforge.org/repository/alac/trunk ALAC
Then I compiled the library with `make` and everything went fine until I tried to build the convert-utility.
me@mydomain:~/Projects/ALAC/convert-utility$ make
(cd ../codec; make)
make[1]: Entering directory `/home/me/Projects/ALAC/codec'
make[1]: `libalac.a' is up to date.
make[1]: Leaving directory `/home/me/Projects/ALAC/codec'
g++ -Wall -L../codec -lalac main.o CAFFileALAC.o -o alacconvert
main.o: In function `EncodeALAC(_IO_FILE*, _IO_FILE*, AudioFormatDescription, AudioFormatDescription, int)':
/home/me/Projects/ALAC/convert-utility/main.cpp:400: undefined reference to `ALACEncoder::ALACEncoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:413: undefined reference to `ALACEncoder::GetMagicCookieSize(unsigned int)'
/home/me/Projects/ALAC/convert-utility/main.cpp:415: undefined reference to `ALACEncoder::GetMagicCookie(void*, unsigned int*)'
/home/me/Projects/ALAC/convert-utility/main.cpp:487: undefined reference to `Swap24'
/home/me/Projects/ALAC/convert-utility/main.cpp:472: undefined reference to `Swap16'
/home/me/Projects/ALAC/convert-utility/main.cpp:480: undefined reference to `Swap32'
/home/me/Projects/ALAC/convert-utility/main.cpp:540: undefined reference to `Swap24'
/home/me/Projects/ALAC/convert-utility/main.cpp:525: undefined reference to `Swap16'
/home/me/Projects/ALAC/convert-utility/main.cpp:533: undefined reference to `Swap32'
main.o: In function `DecodeALAC(_IO_FILE*, _IO_FILE*, AudioFormatDescription, AudioFormatDescription, int, unsigned int)':
/home/me/Projects/ALAC/convert-utility/main.cpp:603: undefined reference to `ALACDecoder::ALACDecoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:612: undefined reference to `ALACDecoder::Init(void*, unsigned int)'
/home/me/Projects/ALAC/convert-utility/main.cpp:615: undefined reference to `BitBufferInit'
/home/me/Projects/ALAC/convert-utility/main.cpp:704: undefined reference to `ALACDecoder::~ALACDecoder()'
/home/me/Projects/ALAC/convert-utility/main.cpp:665: undefined reference to `ALACDecoder::Decode(BitBuffer*, unsigned char*, unsigned int, unsigned int, unsigned int*)'
/home/me/Projects/ALAC/convert-utility/main.cpp:682: undefined reference to `BitBufferReset'
CAFFileALAC.o: In function `WriteCAFFdescChunk(_IO_FILE*, AudioFormatDescription)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:85: undefined reference to `SwapFloat64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:86: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:87: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:88: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:89: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:90: undefined reference to `Swap32NtoB'
CAFFileALAC.o:/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:91: more undefined references to `Swap32NtoB' follow
CAFFileALAC.o: In function `WriteCAFFpaktChunkHeader(_IO_FILE*, port_CAFPacketTableHeader*, unsigned int)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:167: undefined reference to `Swap64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:168: undefined reference to `Swap64NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:169: undefined reference to `Swap32NtoB'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:170: undefined reference to `Swap32NtoB'
CAFFileALAC.o: In function `GetCAFFdescFormat(_IO_FILE*, AudioFormatDescription*)':
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:420: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:421: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:422: undefined reference to `SwapFloat64BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:423: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:424: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:425: undefined reference to `Swap32BtoN'
/home/me/Projects/ALAC/convert-utility/CAFFileALAC.cpp:443: undefined reference to `Swap32BtoN'
collect2: ld returned 1 exit status
make: *** [alacconvert] Error 1
Trivial fix. Here is the diff:
$ svn diff makefile
Index: makefile
===================================================================
--- makefile (revision 3)
+++ makefile (working copy)
@@ -30,7 +30,7 @@
alacconvert: $(OBJS)
(cd $(CODECDIR); $(MAKE))
- $(CC) $(LFLAGS) $(OBJS) -o alacconvert
+ $(CC) $(OBJS) -o alacconvert $(LFLAGS)
main.o : main.cpp
$(CC) -I $(INCLUDES) $(CFLAGS) main.cpp
I'm not sure if I should be doing ifdefs for different OSes (Solaris, AIX etc). They don't publish what *nix platforms they test on.