Difference between revisions of "Third Party Libraries"

From Second Life Wiki
Jump to navigation Jump to search
(Added vivox, unknown libraries section)
(→‎FONTS: Added note on LL font change to opensource ones)
 
(35 intermediate revisions by 15 users not shown)
Line 1: Line 1:
{{OSWikiLearnBox}}
__NOTOC__
{| border="1" cellpadding="3"
The following table lists libraries and other third party (3p) dependencies used in constructing the Second Life Viewer.
    |- style="background:#ffdead;"
 
    !Library !! Version !! Description !! GPL-Compatible?  || Covered under [http://secondlife.com/developers/opensource/flossexception FLOSS exception]?
Most of these (all the open source ones) should be available as prebuilds packaged by and for use with [[Autobuild]].


<!-- Apache -->
==== Generic Layout (Single-branch, 2024 Style) ====
|-valign="top"
![http://apr.apache.org/ Apache Portable Runtime ] || 1.2.8
|A set of C functions which provide a portable and consistent interface into operating system - or simply widely useful - functionality. We primarily use it for threading and socket i/o. This is actually three packages, apr, apr-util and apr-iconv.
|| No, Apache 2.0 license
|| Yes


<!-- Boost -->
3p packages should vendor upstream contents using [https://git-scm.com/book/en/v2/Git-Tools-Submodules git submodules] unless a source git repository for the source dependency is not available.
|-valign="top"
A typical 3p package layout looks like this:
![http://www.boost.org/ Boost] || 1.32.0
|A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization.
|| Yes, BSDish


<!-- c-ares-->
<pre>
|-valign="top"
.
![http://daniel.haxx.se/projects/c-ares/ c-ares] || 1.3.2
├── [vendor submodule]/ - Git submodule containing upstream source
|Performs DNS requests and name resolves asynchronously. Used with libcurl to keep all HTTP operations async.
├── .github/           - CI/CD and repository configuration
|| Yes, BSDish
├── autobuild.xml      - Autobuild manifest
├── build-cmd.sh        - Script used to build the repository
├── LICENSE            - Repository licensing
└── README.md          - Repository readme
</pre>


<!-- cg -->
===== Contributor Instructions =====
|-valign="top"
![http://developer.nvidia.com/page/cg_main.html CG] || ??
|cg controls some visual effects. - NOT USED BY THE NORMAL CLIENT.
|| No, permissive license but forbids reverse engineering.
|| No


<!-- ELFIO -->
The general workflow for contributing changes to a 3p library looks like this:
|-valign="top"
![http://sourceforge.net/projects/elfio/ ELFIO] || 1.0.3
|Enhanced stacktrace information on the Linux client.
|| Yes, LGPL


<!-- Expat -->
# Fork the repository and make changes. Be sure to test your work locally.
|-valign="top"
# Create a PR (Be sure to follow [https://gist.github.com/mikepea/863f63d6e37281e329f8 PR Etiquette] and our [https://github.com/secondlife/.github/blob/main/CODE_OF_CONDUCT.md Code of Conduct])
![http://expat.sourceforge.net/ Expat] || 1.95.8
# Have this PR reviewed and merged
|XML parser.
# Done! The maintainer should cut a new version as appropriate using the workflow described below.
|| Yes, MIT


<!-- FMOD -->
===== Maintainer Instructions =====
|-valign="top"
![http://www.fmod.org FMOD] ||  3.75
|Audio engine and mp3 stream decoder
|| No, proprietary
|| No


<!-- FreeType -->
[[File:Screenshot 2024-08-10 at 11-48-23 Releases · secondlife 3p-zlib-ng.png|thumb|top|right|A properly versioned and promoted release of 3p-zlib-ng]]
|-valign="top"
![http://www.freetype.org/ FreeType] || 2.1.5
|Font engine.
|| Yes, dual licensed BSD/Advertising + GPL


<!-- Glib -->
If you are a 3p package maintainer you will want to follow these instructions to review and release new versions:
|-valign="top"
![http://www.gtk.org/ Glib] || 2.0.7
|??
|| Yes, LGPL


<!-- GTK+ -->
# Review PRs quickly, and merge them directly into the default branch once approved
|-valign="top"
# Cut a new release by using Github's Releases feature:
![http://www.gtk.org/ GTK+] || 2.0.9
## Navigate to '''Repository -> Releases''' and click '''"Draft new Release"'''
|'Native' UI components on the Linux client.
## Click '''Choose a tag''' and create a new tag using the <code>vUPSTREAM-rRELEASE</code> format described below
|| Yes, LGPL
## Click '''Generate release notes''' and edit them as appropriate. Keep the title of the release equal to the version being used.
## Click ''Publish release''


<!-- jpeglib -->
After the release is published, CI/CD should be triggered by the addition of the new tag, and provide a nice set of packages and instructions for consumers to use.
|-valign="top"
![http://www.ijg.org/ jpeglib] || 6b
|JPEG decoder library.
|| Yes, BSD


<!-- KDU -->
===== Version format =====
|-valign="top"
![http://www.kakadusoftware.com/ KDU] || 5.2.1
|Kakadu (KDU) JPEG-2000 decoder library.
|| No, Proprietary


<!-- libcurl-->
3p packages should be released using the following version schema:
|-valign="top"
![http://curl.haxx.se/libcurl/ libcurl] || 7.16.0
|Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources.
|| Yes, MIT


<!-- libpng-->
<pre>
|-valign="top"
Format
![http://www.libpng.org/pub/png/libpng.html libpng] || 1.2.18
|PNG image library.
|| [http://www.libpng.org/pub/png/src/libpng-LICENSE.txt BSD-like]


<!-- libuuid -->
  vUPSTREAM-rRELEASE
|-valign="top"
!libuuid ||  ??
|Generates UUIDs under Linux. Originally a part of the ext2fs filesystem. Also see lluuid.cpp for all platforms.
|| Yes, LGPL


<!-- llMozLib -->
  Example: v1.0.0-r2 (Second vendored release of v1.0.0 of this library)
|-valign="top"
![http://ubrowser.com/llmozlib.php llMozLib] || 1.8.0.9
|llMozLib handles rendering HTML in the viewer via an embedded Gecko ([http://www.mozilla.org/developer/ Mozilla]) engine.
|| Yes, MPL/GPL/LGPL Tri-license


<!-- MESA -->
  UPSTREAM - Upstream package version. ex. 1.0.0 or 6.7
|-valign="top"
  RELEASE - Vendored release number, ex. 1, 2
![http://www.mesa3d.org/ Mesa] ||  6.2.1
</pre>
|Provides the required OpenGL headers under Linux.
|| Yes


<!-- Ogg -->
===== Patches =====
|-valign="top"
![http://xiph.org/ogg/ OGG] || 1.0.3
|Audio control.
|| Yes, BSDish


<!-- OpenGL -->
By convention, patches should be kept in a <code>patches/*</code> directory and applied to the upstream source during build. You can use the following utility function, declared in your '''build-cmd.sh''' script to help:
|-valign="top"
![http://www.opengl.org/ OpenGL] || GLX
| 3D Graphics rendering engine.
|| No (see [http://www.xfree86.org/4.4.0/LICENSE3.html XFree86 License FAQ])


<!-- OpenJPEG -->
<syntaxhighlight lang="bash">
|-valign="top"
apply_patch()
![http://www.openjpeg.org/ OpenJPEG] || 1.0
{
|An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release
    local patch="$1"
|| Yes, however one must beware of patents.
    local path="$2"
    echo "Applying $patch..."
    git apply --check --reverse --directory="$path" "$patch" || git apply --directory="$path" "$patch"
}
</syntaxhighlight>
''Patch helper from [https://github.com/secondlife/3p-boost 3p-boost]''


<!-- openssl -->
===== Differences from old style (vendor branch) =====
|-valign="top"
![http://www.openssl.org/ OpenSSL] || 0.9.7c
|Provides encryption for sensitive actions such as user login
|| No, advertising clauses.
|| Yes


<!-- quicktime -->
Originally, 3p libraries were maintained using a separate '''vendor''' and default branch. Repositories using this style should be migrated to new single-branch format. Benefits of using a single-branch are:
|-valign="top"
![http://developer.apple.com/quicktime/ Quicktime] || 7.13
|Used to play in-world video clips on a prim.
|| No, Proprietary
|| No


<!-- libresolv / libllresolv -->
* Simpler PR process (Make PR against default, merge it. Done.)
|-valign="top"
* Faster release process, which means quicker integration for package consumers
![http://www.isc.org/index.pl?/sw/bind/ libresolv / libllresolv] || 9.4.1
* Easier integration with GitHub functionality such as Automatic Release Notes
|Linux only - libllresolv is simply a rebuild of the system libresolv.so as the latter is very often broken in various ways on Linux.  [[Building libllresolv]].
* More explicit maintenance of patches makes delta from upstreams clearer and simpler to understand
|| Yes, BSD


<!-- SDL -->
=== List of third party libraries ===
|-valign="top"
![http://www.libsdl.org/index.php SDL] || 1.2.7
|The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client.
|| Yes


<!-- Smartheap -->
{| border="1" cellpadding="3"
|-valign="top"
|- style="background:#ffdead;"
![http://www.microquill.com/smartheap/index.html Smartheap] || ??
!Library
|Memory allocation (Windows only malloc() replacement)
!Repository
|| No, Proprietary, but entirely optional (easy to comment out)
!License
|| No
!Upstream Home
!Description


<!-- TUT -->
|-
|-valign="top"
|apr_suite
![http://tut-framework.sourceforge.net/ TUT] || 2006-06-22
|[https://github.com/secondlife/3p-apr_suite/ 3p-apr]
|[https://github.com/secondlife/3p-apr_suite/blob/main/apr/LICENSE Apache License]
|http://apr.apache.org/
|"A set of C functions which provide a portable and consistent interface into operating system - or simply widely useful - functionality. We primarily use it for threading and socket i/o. This is actually three packages, apr, apr-util and apr-iconv."
|-
|boost
|[https://github.com/secondlife/3p-boost 3p-boost]
|[https://github.com/boostorg/boost/blob/master/LICENSE_1_0.txt Boost License]
|http://www.boost.org/
|A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization.
|-
|curl
|[https://github.com/secondlife/3p-curl 3p-curl]
|''[https://github.com/secondlife/3p-curl/blob/master/curl/COPYING BSD-style]''<sup>[[#BSDstyle|B]]</sup>
| http://curl.haxx.se/libcurl/
|Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources.
|-
|expat
|[https://github.com/secondlife/3p-expat 3p-expat]
|[https://github.com/libexpat/libexpat/blob/master/COPYING MIT License]
|https://github.com/libexpat/libexpat
|XML parser.
|-
|freetype
|[https://github.com/secondlife/3p-freetype 3p-freetype]
|[https://github.com/freetype/freetype/blob/master/LICENSE.TXT Freetype License and Others]
|http://www.freetype.org/
|Font engine.
|-
|glh_linear
|[https://github.com/secondlife/3p-glh_linear 3p-glh_linear]
|
|
|nVidia NVParse SDK: platform-independent C++ Apple OpenGL helper library
|-
|gstreamer
|[https://bitbucket.org/lindenlab/3p-gstreamer 3p-gstreamer]
|Open
|http://gstreamer.freedesktop.org
|
|-
|havok
|
|Commercial
|
|
|-
|jpeglib
|[https://bitbucket.org/lindenlab/3p-jpeglib 3p-jpeglib]
|Open
|http://www.ijg.org/
|JPEG decoder library.
|-
|kdu
|[https://hg.lindenlab.com/lindenlab/3p-kdu-private 3p-kdu-private]<sup>[[#PrivateRepo|LL]]</sup>
|Commercial
|http://www.kakadusoftware.com
|Kakadu (KDU) JPEG-2000 decoder library.
|-
|libpng
|[https://bitbucket.org/lindenlab/3p-libpng 3p-libpng]
|Open
| http://www.libpng.org/pub/png/libpng.html
|PNG image library.
|-
|libxml2
|[https://github.com/secondlife/3p-libxml2 3p-libxml2]
|[https://gitlab.gnome.org/GNOME/libxml2/-/blob/master/Copyright?ref_type=heads MIT License]
|
|
|-
|ndofdev
|[https://github.com/secondlife/3p-libndofdev 3p-libndofdev]
|''[https://github.com/secondlife/3p-libndofdev/blob/master/libndofdev/COPYING BSD-style]''<sup>[[#BSDstyle|B]]</sup>
|
|Provides joystick driver support (mac and win) for the 3DConnexion SpaceNavigator.
|-
|ogg_vorbis
|[https://github.com/secondlife/3p-ogg_vorbis 3p-ogvorbis]
|''[https://github.com/xiph/ogg/blob/master/COPYING BSD-style]''<sup>[[#BSDstyle|B]]</sup>
|http://xiph.org/ogg/
|Audio codec and playback.
|-
|openal
|[https://github.com/secondlife/3p-openal-soft 3p-openal-soft]
|[https://github.com/secondlife/3p-openal-soft/blob/main/openal-soft/COPYING GPL]
|http://connect.creativelabs.com/openal/default.aspx
|3D Spatial audio
|-
|openjpeg
|[https://github.com/secondlife/3p-openjpeg 3p-openjpeg]
|''[https://github.com/uclouvain/openjpeg/blob/master/LICENSE BSD-style]''<sup>[[#BSDstyle|B]]</sup>
|http://www.openjpeg.org/
|An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release
|-
|openssl
|[https://github.com/secondlife/3p-openssl 3p-openssl]
|[https://github.com/openssl/openssl/blob/master/LICENSE.txt Apache License]
|http://www.openssl.org/
|Provides encryption for sensitive actions such as user login
|-
|sdl
|[https://github.com/secondlife/3p-sdl2 3p-sdl2]
|[https://github.com/libsdl-org/SDL/blob/main/LICENSE.txt zlib License]
|http://www.libsdl.org/index.php
|The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client.
|-
|slvoice
|
|Commercial
|
|This is the Vivox provided executable (renamed SLVoice)
|-
|tut
|[https://github.com/secondlife/3p-tut 3p-tut]
|''[https://github.com/secondlife/3p-tut/blob/master/LICENSE.txt BSD-style]''<sup>[[#BSDstyle|B]]</sup>
|http://tut-framework.sourceforge.net/
|Unit test framework based on the use of c++ meta template programming. Used to test LL libraries.
|Unit test framework based on the use of c++ meta template programming. Used to test LL libraries.
|| Yes, BSD
|-
 
|xmlrpc_epi
<!-- Vorbis -->
|[https://github.com/secondlife/3p-xmlrpc-epi 3p-xmlrpc-epi]
|-valign="top"
|[https://github.com/secondlife/3p-xmlrpc-epi/blob/master/xmlrpc-epi/COPYING Epinions, Inc License]
![http://xiph.org/vorbis/ Vorbis] || 1.1.2
|http://xmlrpc-epi.sourceforge.net/
|Audio control.
|XML-RPC protocol utility
|| Yes
|-
 
|zlib-ng
<!-- xmlrpc-epi -->
|[https://github.com/secondlife/3p-zlib-ng 3p-zlib-ng]
|-valign="top"
|[https://github.com/zlib-ng/zlib-ng/blob/develop/LICENSE.md zlib License]
![http://xmlrpc-epi.sourceforge.net/ xmlrpc-epi] || 0.51
|http://www.zlib.net/
|Controls the XML-RPC protocol.
|| Yes, BSD
 
<!-- zlib -->
|-valign="top"
![http://www.zlib.net/ zlib] || 1.2.1
|zlib is a lossless data-compression library which is used for a variety of network i/o and file compression.
|zlib is a lossless data-compression library which is used for a variety of network i/o and file compression.
|| Yes, MIT-like
|}
|}


Line 194: Line 235:


=== Runtime ===
=== Runtime ===
Microsoft components. It's not yet know whether they're redistributable.
Microsoft components. It's not yet known whether they're redistributable.


* dbghelp.dll: [http://msdn2.microsoft.com/EN-US/library/ms679294.aspx Redistributable]
* dbghelp.dll: [http://msdn2.microsoft.com/EN-US/library/ms679294.aspx Redistributable]
* msvcp71.dll: C Runtime Library, redistributable
* msvcp71.dll: C++ Runtime Library, redistributable   -viewer now using msvcp80.dll when compiled with VC2005
* msvcr71.dll: C Runtime Library, [http://msdn2.microsoft.com/en-us/library/abx4dbyh(vs.71).aspx Redistributable]
* msvcr71.dll: C Runtime Library, [http://msdn2.microsoft.com/en-us/library/abx4dbyh(vs.71).aspx Redistributable]   -viewer now using msvcr80.dll when compiled with VC2005


=== FMOD ===
== FONTS ==
FMOD sound library. Free for non-commercial projects. A commercial license will be needed for a commercial viewer.
Meta font software files


From the README in the package:
From the Readme.txt
  The fmod.dll file may be redistributed without the authors prior permission,  
The Meta font software files contained in this folder are the
  and must remain unmodifiedThe use of dll 'static linking' tools that aim
  copyrighted property of FSI FontShop International ("FSI") and are
  to hide the fmod library are forbidden.
licensed by FSI solely for use by Linden Research, Inc. and by
residents or users of Second Life in the Second Life environment,
  subject to the Second Life Terms of ServiceThese Meta font software
files may not be copied by residents or developers of Second Life or
  used by them for any other purpose whatsoever.


* fmod.dll: [http://www.fmod.org/fmodlicense.html Redistributable, free for non-commercial projects]
* MtBkLfRg.ttf
*  MtBdLfRg.ttf


=== Mozilla ===
'''NOTE 1:'''  These files must be replaced for an true open source build.
The Gecko engine is MPL/GPL/LGPL licensed, which makes it redistributable.


* app_settings/mozilla
'''NOTE 2:''' At least starting with Viewer 6, Linden Lab has replaced the 'Meta' font with Bitstream's [https://dejavu-fonts.github.io/ DejaVu], which is released under a very permissible license; Viewer 7 additionally added {{code|TwemojiSVG.ttf}}, which is presumably the (huge) [https://github.com/13rac1/twemoji-color-font Twitter Unicode emoji color OpenType-SVG font for Linux/MacOS/Windows] (where SVG images are encoded as if they were font glyphs), released under a Creative Commons 4.0 Attrbution license, and which, in turn, is based on the Twitter Emoji font, also released under the same license.
* freebl3.dll
 
* gksvggdiplus.dll
AFAIK, the only viewer which still contains the two Meta fonts is the Cool VL Viewer — since it still pulls some code from the original SL Viewer 1 — but these are never used on the compiled application itself.
* js3250.dll
* nspr4.dll
* nss3.dll
* nssckbi.dll
* plc4.dll,
* plds4.dll
* smime3.dll
* softokn3.dll
* ssl3.dll
* xpcom.dll
* xul.dll


=== Kakadu ===
=== Kakadu ===
JPEG2000 library. '''Not redistributable'''.
JPEG2000 library. '''Not redistributable'''.
OpenJPEG is an alternative library that is redistributable (does it work on Windows?)
OpenJPEG is an alternative library that is redistributable


* llkdu.dll
* llkdu.dll
Starting with Viewer 2.5, llkdu.dll has been phased out. The libkdu.a and kdu.lib are still not redistributable but can be built from the toolkit provided by Kakadu under a license. How to build a viewer with such a library is documented in [[KDU Implementation]].


=== OpenSSL ===
=== OpenSSL ===
Line 241: Line 277:


=== Vivox ===
=== Vivox ===
Vivox is the component that provides the voice functionality. Redistribution status unknown.
Vivox is the component that provides the voice functionality.


* SLVoice.exe: Voice daemon
* SLVoice.exe: Voice daemon. '''Not redistributable'''
* SLVoiceAgent: Exact purpose unknown
* SLVoiceAgent: Exact purpose unknown. '''Not redistributable'''
* alut.dll
* alut.dll: OpenAL, by Creative Labs. Redistributable.
* ortp.dll
* ortp.dll: oRTP project, LGPL. Redistributable.
* srtp.dll
* srtp.dll: Secure RTP?
* vivoxsdk.dll: Vivox Communications API
* vivoxsdk.dll: Vivox Communications API. '''Not redistributable'''
* wrap_oal.dll: OpenAL32 by Creative Labs
* wrap_oal.dll: OpenAL32 by Creative Labs. Redistributable.


=== Unknown Libraries ===
=== Unknown Libraries ===
The purpose and licensing of these files is not known:
The purpose and licensing of these files is not known:


* tntk.dll: Probably Vivox
* tntk.dll: Probably Vivox related  -see [https://wiki.secondlife.com/wiki/Voice/Technical Voice/Technical] for other info on ViVox files
 
[[Category:Compiling viewer]]

Latest revision as of 10:54, 28 September 2024

The following table lists libraries and other third party (3p) dependencies used in constructing the Second Life Viewer.

Most of these (all the open source ones) should be available as prebuilds packaged by and for use with Autobuild.

Generic Layout (Single-branch, 2024 Style)

3p packages should vendor upstream contents using git submodules unless a source git repository for the source dependency is not available. A typical 3p package layout looks like this:

.
├── [vendor submodule]/ - Git submodule containing upstream source
├── .github/            - CI/CD and repository configuration
├── autobuild.xml       - Autobuild manifest
├── build-cmd.sh        - Script used to build the repository
├── LICENSE             - Repository licensing
└── README.md           - Repository readme
Contributor Instructions

The general workflow for contributing changes to a 3p library looks like this:

  1. Fork the repository and make changes. Be sure to test your work locally.
  2. Create a PR (Be sure to follow PR Etiquette and our Code of Conduct)
  3. Have this PR reviewed and merged
  4. Done! The maintainer should cut a new version as appropriate using the workflow described below.
Maintainer Instructions
A properly versioned and promoted release of 3p-zlib-ng

If you are a 3p package maintainer you will want to follow these instructions to review and release new versions:

  1. Review PRs quickly, and merge them directly into the default branch once approved
  2. Cut a new release by using Github's Releases feature:
    1. Navigate to Repository -> Releases and click "Draft new Release"
    2. Click Choose a tag and create a new tag using the vUPSTREAM-rRELEASE format described below
    3. Click Generate release notes and edit them as appropriate. Keep the title of the release equal to the version being used.
    4. Click Publish release

After the release is published, CI/CD should be triggered by the addition of the new tag, and provide a nice set of packages and instructions for consumers to use.

Version format

3p packages should be released using the following version schema:

Format

  vUPSTREAM-rRELEASE

  Example: v1.0.0-r2 (Second vendored release of v1.0.0 of this library)

  UPSTREAM - Upstream package version. ex. 1.0.0 or 6.7
  RELEASE - Vendored release number, ex. 1, 2
Patches

By convention, patches should be kept in a patches/* directory and applied to the upstream source during build. You can use the following utility function, declared in your build-cmd.sh script to help:

apply_patch()
{
    local patch="$1"
    local path="$2"
    echo "Applying $patch..."
    git apply --check --reverse --directory="$path" "$patch" || git apply --directory="$path" "$patch"
}

Patch helper from 3p-boost

Differences from old style (vendor branch)

Originally, 3p libraries were maintained using a separate vendor and default branch. Repositories using this style should be migrated to new single-branch format. Benefits of using a single-branch are:

  • Simpler PR process (Make PR against default, merge it. Done.)
  • Faster release process, which means quicker integration for package consumers
  • Easier integration with GitHub functionality such as Automatic Release Notes
  • More explicit maintenance of patches makes delta from upstreams clearer and simpler to understand

List of third party libraries

Library Repository License Upstream Home Description
apr_suite 3p-apr Apache License http://apr.apache.org/ "A set of C functions which provide a portable and consistent interface into operating system - or simply widely useful - functionality. We primarily use it for threading and socket i/o. This is actually three packages, apr, apr-util and apr-iconv."
boost 3p-boost Boost License http://www.boost.org/ A set of portable C++ libraries which provide a wide set of functionality. Used primarily for tokenization.
curl 3p-curl BSD-styleB http://curl.haxx.se/libcurl/ Handles moving data across the net in many different protocols. Used to GET/POST/PUT/DELETE web resources.
expat 3p-expat MIT License https://github.com/libexpat/libexpat XML parser.
freetype 3p-freetype Freetype License and Others http://www.freetype.org/ Font engine.
glh_linear 3p-glh_linear nVidia NVParse SDK: platform-independent C++ Apple OpenGL helper library
gstreamer 3p-gstreamer Open http://gstreamer.freedesktop.org
havok Commercial
jpeglib 3p-jpeglib Open http://www.ijg.org/ JPEG decoder library.
kdu 3p-kdu-privateLL Commercial http://www.kakadusoftware.com Kakadu (KDU) JPEG-2000 decoder library.
libpng 3p-libpng Open http://www.libpng.org/pub/png/libpng.html PNG image library.
libxml2 3p-libxml2 MIT License
ndofdev 3p-libndofdev BSD-styleB Provides joystick driver support (mac and win) for the 3DConnexion SpaceNavigator.
ogg_vorbis 3p-ogvorbis BSD-styleB http://xiph.org/ogg/ Audio codec and playback.
openal 3p-openal-soft GPL http://connect.creativelabs.com/openal/default.aspx 3D Spatial audio
openjpeg 3p-openjpeg BSD-styleB http://www.openjpeg.org/ An open-source JPEG-2000 library; a slower alternative to Kadaku. Used in the open source release
openssl 3p-openssl Apache License http://www.openssl.org/ Provides encryption for sensitive actions such as user login
sdl 3p-sdl2 zlib License http://www.libsdl.org/index.php The Simple DirectMedia Layer libraries are used for handling input and basic window/GL setup on the Linux client.
slvoice Commercial This is the Vivox provided executable (renamed SLVoice)
tut 3p-tut BSD-styleB http://tut-framework.sourceforge.net/ Unit test framework based on the use of c++ meta template programming. Used to test LL libraries.
xmlrpc_epi 3p-xmlrpc-epi Epinions, Inc License http://xmlrpc-epi.sourceforge.net/ XML-RPC protocol utility
zlib-ng 3p-zlib-ng zlib License http://www.zlib.net/ zlib is a lossless data-compression library which is used for a variety of network i/o and file compression.

Redistribution

Some files in the SL installation can't be freely redistributed. This means it's not possible to simply package and offer for download a modified viewer: some files must not be redistributed.

This page documents the licenses and redistribution requirements of various files used by the viewer.

Windows

These are the files that need to be shipped with the Windows version

Runtime

Microsoft components. It's not yet known whether they're redistributable.

  • dbghelp.dll: Redistributable
  • msvcp71.dll: C++ Runtime Library, redistributable -viewer now using msvcp80.dll when compiled with VC2005
  • msvcr71.dll: C Runtime Library, Redistributable -viewer now using msvcr80.dll when compiled with VC2005

FONTS

Meta font software files

From the Readme.txt

The Meta font software files contained in this folder are the
copyrighted property of FSI FontShop International ("FSI") and are
licensed by FSI solely for use by Linden Research, Inc. and by
residents or users of Second Life in the Second Life environment,
subject to the Second Life Terms of Service.  These Meta font software
files may not be copied by residents or developers of Second Life or
used by them for any other purpose whatsoever.
  • MtBkLfRg.ttf
  • MtBdLfRg.ttf

NOTE 1: These files must be replaced for an true open source build.

NOTE 2: At least starting with Viewer 6, Linden Lab has replaced the 'Meta' font with Bitstream's DejaVu, which is released under a very permissible license; Viewer 7 additionally added TwemojiSVG.ttf, which is presumably the (huge) Twitter Unicode emoji color OpenType-SVG font for Linux/MacOS/Windows (where SVG images are encoded as if they were font glyphs), released under a Creative Commons 4.0 Attrbution license, and which, in turn, is based on the Twitter Emoji font, also released under the same license.

AFAIK, the only viewer which still contains the two Meta fonts is the Cool VL Viewer — since it still pulls some code from the original SL Viewer 1 — but these are never used on the compiled application itself.

Kakadu

JPEG2000 library. Not redistributable. OpenJPEG is an alternative library that is redistributable

  • llkdu.dll

Starting with Viewer 2.5, llkdu.dll has been phased out. The libkdu.a and kdu.lib are still not redistributable but can be built from the toolkit provided by Kakadu under a license. How to build a viewer with such a library is documented in KDU Implementation.

OpenSSL

SSL library. Redistributable.

  • libeay32.dll
  • ssleay32.dll

Vivox

Vivox is the component that provides the voice functionality.

  • SLVoice.exe: Voice daemon. Not redistributable
  • SLVoiceAgent: Exact purpose unknown. Not redistributable
  • alut.dll: OpenAL, by Creative Labs. Redistributable.
  • ortp.dll: oRTP project, LGPL. Redistributable.
  • srtp.dll: Secure RTP?
  • vivoxsdk.dll: Vivox Communications API. Not redistributable
  • wrap_oal.dll: OpenAL32 by Creative Labs. Redistributable.

Unknown Libraries

The purpose and licensing of these files is not known:

  • tntk.dll: Probably Vivox related -see Voice/Technical for other info on ViVox files