// 
//     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.
//

= FaqOtherSunCA
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki FaqOtherSunCA
:description: Apache NetBeans wiki FaqOtherSunCA
:toc: left
:toc-title:
:syntax: true

=== I've already signed a CA for another Oracle project, do I need to sign another one for NetBeans?

No. Once you execute an OCA, it is valid for all Oracle-sponsored projects. One OCA covers all of your contributions to all of these projects. However, before you
contribute to any Oracle-sponsored project you should contact the Oracle lead for that project. And remember, not all contributions will be used or incorporated into the code for the project.

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/FaqOtherSunCA[http://wiki.netbeans.org/FaqOtherSunCA] , 
that was last modified by NetBeans user Jkovalsky 
on 2011-12-12T13:58:27Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
