<?xml version="1.0" ?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!DOCTYPE faqs SYSTEM "sbk:/style/dtd/faqs.dtd">

<faqs title="Distributing &XercesCName;">

    <faq title="Can I use &XercesCName; in my product?">
        <q>Can I use &XercesCName; in my product?</q>
        <a>
            <p>Most likely yes. &XercesCName; is distributed under
               the terms of the Apache Software License version 2.0
               which is a fairly permissive license. In particular,
               it allows you to distribute your application in
               binary form without requiring you to also release
               the source code. Read the license agreement for more
               information and if you still have further questions,
               then please address them to the
            <jump href="&MailURI;">&XercesCName; user mailing list</jump>.</p>

        </a>
    </faq>

    <faq title="Which files do I need to distribute with my application?">
        <q>Which files do I need to distribute with my application?</q>
        <a>
            <p>You only need to distribute <em>one</em> file:<br></br>

            &XercesC3WindowsDLL;.dll for Windows<br/>
            &XercesC3UnixLib;-&XercesC3UnixSoVersion;.a for AIX<br/>
            &XercesC3UnixLib;-&XercesC3UnixSoVersion;so. for Solaris/Linux<br/>
            &XercesC3UnixLib;-&XercesC3UnixSoVersion;.sl for HP-UX on PA-RISC<br/>
            &XercesC3UnixLib;-&XercesC3UnixSoVersion;.so for HP-UX on IA64<br/>
            &XercesC3UnixLib;-&XercesC3UnixSoVersion;.dylib for Mac OS X
            </p>

            <p>Note, however, that if you built &XercesCName; with dependencies
               on other libraries (e.g., ICU for transcoder support or libcurl
               for net accessor support) then you will need to ship those
               libraries as well.</p>

            <p>You can also link your application to a static version
               of the &XercesCName; library in which case you won't need
               to distribute any extra libraries.</p>
        </a>
    </faq>

    <faq title="I do not see a binary for my platform. When will it be available?">

        <q>I do not see a binary for my platform. When will it be available?</q>

        <a>
         <p>The reason why you see binaries only for some specific
            platforms is that we have had the maximum requests for
            them. Moreover, we have limited resources and hence cannot
            publish binaries for every platform. If you wish to
            contribute your time and effort in building binaries for a
            specific platform/environment then please send a mail to the
            <jump href="&MailURI;">&XercesCName; developer mailing list</jump>.</p>
        </a>
    </faq>


    <faq title="When will a port to my platform be available?">

        <q>When will a port to my platform be available?</q>

        <a>
          <p>We would like to see &XercesCName; ported to as
          many platforms as practical. However, due to limited resources
          we cannot do all the ports. Here are the <jump
          href="program-others-&XercesC3Series;.html#PortingGuidelines">Porting
          Guidelines</jump>.</p>

            <p>We encourage you to submit the changes that
            are required to make it work on another platform. We will
            incorporate these changes in the source code base and make
            them available in the future releases.</p>

            <p>All porting changes may be sent to the
            <jump href="&MailURI;">&XercesCName; developer mailing list</jump>
            .</p>
        </a>
    </faq>
</faqs>
