This commit is contained in:
caishi 2021-03-25 21:47:22 +08:00
parent 3f01ac4ccb
commit d86b07ae4a
14 changed files with 555 additions and 55 deletions

View File

@ -2,7 +2,7 @@ import React from 'react';
function Footer(props){
return(
<div className="footsnav">ddd</div>
<div className="footsnav">Copyright © 中国开源云联盟 京ICP备05013730号-37</div>
)
}
export default Footer;

View File

@ -1,14 +1,10 @@
import React from 'react';
import Nav from './Nav';
function Header(props){
return(
<div className="headsnav">
<div>
<ul>
<li>首页</li>
<li>开源许可证</li>
</ul>
</div>
<Nav />
</div>
)
}

View File

@ -0,0 +1,11 @@
import React from 'react';
import Nav from './Nav';
function HomeHeader(props){
return(
<div className="homeHeader">
<Nav />
</div>
)
}
export default HomeHeader;

17
src/mulan/HOC/HomeHoc.jsx Normal file
View File

@ -0,0 +1,17 @@
import React, { Component } from 'react';
import Header from './HomeHeader';
import './Index.scss';
export function HomeHoc(Sub){
return class II extends Component {
render(){
return(
<div style={{height:"100%",overflow:"auto"}}>
<Header {...this.props} {...this.state}/>
<div className="homebody"><Sub {...this.props} {...this.state}/></div>
</div>
)
}
}
}
export default HomeHoc;

View File

@ -7,7 +7,7 @@ export function HOC(Sub){
return class II extends Component {
render(){
return(
<div style={{height:"100%"}}>
<div style={{height:"100%",overflow:"auto"}}>
<Header {...this.props} {...this.state}/>
<div className="homebody"><Sub {...this.props} {...this.state}/></div>
<Footer {...this.props} {...this.state}/>

View File

@ -5,27 +5,41 @@
top:0px;
height: 60px;
line-height: 60px;
background-color: #fff;
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
& > div{
width:1200px;
margin: 0px auto;
ul{
display: flex;
}
.homeHeader{
position: fixed;
width: 100%;
left: 0px;
top:0px;
height: 60px;
line-height: 60px;
}
.headDiv{
width:1200px;
margin: 0px auto;
.headerNav{
display: flex;
height: 100%;
li{
padding:0px 18px;
height: 100%;
li{
padding:0px 18px;
height: 100%;
font-size: 16px;
}
font-size: 16px;
}
}
}
.homebody{
padding-top: 60px;
}
.footsnav{
position: absolute;
width: 100%;
bottom: 0px;
left: 0px;
// position: absolute;
// width: 100%;
// bottom: 0px;
// left: 0px;
text-align: center;
padding-bottom:10px;
background-color: #fff;
color: #999;
}

14
src/mulan/HOC/Nav.jsx Normal file
View File

@ -0,0 +1,14 @@
import React from 'react';
import { Link } from 'react-router-dom';
function Nav(props){
return(
<div className="headDiv">
<ul className="headerNav">
<li><Link to={`/`}>首页</Link></li>
<li><Link to={`/license/preface`}>开源许可证</Link></li>
</ul>
</div>
)
}
export default Nav;

View File

@ -1,23 +1,9 @@
import React from 'react';
import { HOC } from './HOC/Index';
import {Route,Switch} from 'react-router-dom';
import Loadable from 'react-loadable';
import Loading from '../Loading';
import { HomeHoc } from './HOC/HomeHoc';
const LicenseIndex = Loadable({
loader: () => import('./license/Index'),
loading: Loading,
})
function Index(props){
return(
<Switch {...props}>
<Route
path="/license"
render={(p) => (
<LicenseIndex {...props} {...p} />
)}
></Route>
</Switch>
<div>dsfdsdf首页</div>
)
}
export default HOC(Index);
export default HomeHoc(Index);

107
src/mulan/license/FAQ.jsx Normal file
View File

@ -0,0 +1,107 @@
import React from 'react';
import Title from '../../forge/Component/Title';
import RenderHtml from '../../components/render-html';
function FAQ(props){
const value = `<div class="content">
<p><strong>木兰宽松许可证第1版Mulan PSL v1的主要特点是什么</strong></p>
<p class="tid2 mb2">Mulan PSL v1许可证采用中英文表达中英文表述具有同等法律效力简化了中国使用者进行法律解释时的复杂度许可证针对现有诉讼问题更清晰地明确版权专利和商标授权提供更完善的法律保护许可证遵从表述简洁原则去除冗余条款简洁容易理解兼容性好</p>
<p><strong>木兰宽松许可证第1版Mulan PSL v1与业界主流许可证的主要异同是什么</strong></p>
<p class="tid2">Mulan PSL v1与BSD 3-clause License与Apache License V2.0在声明义务专利许可对用户专利维权限制及版权许可上均有差异在商标许可上无差异见下表</p>
<div class="mb2">
<table class="ui small celled table">
<thead>
<tr>
<th style="width:10%"></th>
<th class="center aligned" style="width:30%"><strong>Mulan PSL v1</strong></th>
<th class="center aligned" style="width:30%"><strong>BSD 3-clause License</strong></th>
<th class="center aligned" style="width:30%"><strong>Apache License V2.0</strong></th>
</tr>
</thead>
<tbody>
<tr class="top aligned">
<td><strong>声明义务</strong></td>
<td>
<p>1分发时附带许可证保留免责等声明</p>
</td>
<td>
<p>1分发时附带许可证保留免责等声明</p>
<p>2其他使用时附带许可证保留免责等声明</p>
</td>
<td>
<p>1分发时附带许可证</p>
<p>2分发修改版时应明显声明已修改的文件</p>
<p>3分发修改版源代码时保留各种声明</p>
<p>4如许可软件含Notice文件则分发修改版时应带其中的归属声明</p>
</td>
</tr>
<tr class="top aligned">
<td><strong>专利许可</strong></td>
<td>
<p>1原始许可人及其关联实体提供专利许可</p>
<p>2后续贡献者及其关联实体提供专利许可</p>
</td>
<td>
<p>无明确专利许可</p>
</td>
<td>
<p>1原始许可人提供专利许可</p>
<p>2后续贡献者及其关联实体提供专利许可</p>
</td>
</tr>
<tr class="top aligned">
<td><strong>对用户专利维权的限制</strong></td>
<td>
<p>1用户及其关联实体如直接对许可软件发起专利诉讼专利许可终止</p>
<p>2发起非诉讼维权如行政维权专利许可终止</p>
<p>3通过间接方式实施上述行为专利许可终止</p>
</td>
<td></td>
<td>
<p>1用户及其关联实体如直接对许可软件发起专利诉讼专利许可终止</p>
</td>
</tr>
<tr class="top aligned">
<td><strong>版权许可</strong></td>
<td>
<p>1原始版权人及其关联公司提供版权许可</p>
<p>2后续贡献者及其关联实体提供版权许可</p>
</td>
<td>
<p>所有贡献者授予版权许可</p>
</td>
<td>
<p>1原始许可人提供版权许可</p>
<p>2后续贡献者及其关联实体提供版权许可</p>
</td>
</tr>
<tr class="top aligned">
<td><strong>商标许可</strong></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<p><strong>木兰宽松许可证第1版Mulan PSL v1与业界主流许可证兼容情况如何</strong></p>
<p class="tid2">许可证的兼容性评判并无统一标准我们从Mulan PSL v1的条款及目的出发认为Mulan PSL v1与BSD类许可证类似兼容性很好BSDMIT类宽松许可证兼容Mulan PSL v1许可证Mulan PSL v1兼容Apache License v2.0L/GPLv2L/GPLv3等许可证许可在BSDMIT类许可证下的代码可以贡献到Mulan PSL v1的项目中许可在Mulan PSL v1下的代码可以贡献到Apache License V2.0L/GPLv2或L/GPLv3等的项目中</p>
<p class="tid2">注意许可证A兼容许可证BA许可证是B许可证 Compatible是指A授权的作品与B授权的作品经过修改或合并可以使用B对作品的整体进行授权兼容性是有方向的A兼容B但B不一定兼容A</p>
</div>`;
return(
<div>
<Title>常见问题</Title>
<div class="content">
<div className="pre">
<RenderHtml className="break_word_comments imageLayerParent" value={value} url={props.history.location}/>
</div>
</div>
</div>
)
}
export default FAQ;

View File

@ -10,28 +10,61 @@ const Preface = Loadable({
loader: () => import('./Preface'),
loading: Loading,
})
const PSL = Loadable({
loader: () => import('./PSL'),
loading: Loading,
})
const Public = Loadable({
loader: () => import('./Public'),
loading: Loading,
})
const FAQ = Loadable({
loader: () => import('./FAQ'),
loading: Loading,
})
function Index(props){
const pathname = props.history.location.pathname;
return(
<div className="panelsBox">
<Box>
<Short>
<ul className="leftmenus">
<li><Link to={``}>序言</Link></li>
<li><Link to={``}>木兰宽松许可证</Link></li>
<li><Link to={``}>木兰公共许可证</Link></li>
<li><Link to={``}>常见问题</Link></li>
<li className={pathname.indexOf(`/license/preface`) > -1 ?"active":""}><Link to={`/license/preface`}></Link></li>
<li className={pathname.indexOf(`/license/psl`) > -1 ?"active":""}><Link to={`/license/psl/1`}>木兰宽松许可证</Link></li>
<li className={pathname.indexOf(`/license/public`) > -1 ?"active":""}><Link to={`/license/public/1`}>木兰公共许可证</Link></li>
<li className={pathname.indexOf(`/license/faq`) > -1 ?"active":""}><Link to={`/license/faq`}>常见问题</Link></li>
</ul>
</Short>
<Long>
<Gap>
<Switch {...props}>
<Route
path="/license/preface"
render={(p) => (
<Preface {...props} {...p} />
)}
></Route>
</Switch>
<div className="boxshadow">
<Switch {...props}>
<Route
path="/license/preface"
render={(p) => (
<Preface {...props} {...p} />
)}
></Route>
<Route
path="/license/psl/:id"
render={(p) => (
<PSL {...props} {...p} />
)}
></Route>
<Route
path="/license/public/:id"
render={(p) => (
<Public {...props} {...p} />
)}
></Route>
<Route
path="/license/faq"
render={(p) => (
<FAQ {...props} {...p} />
)}
></Route>
</Switch>
</div>
</Gap>
</Long>
</Box>

View File

@ -4,12 +4,26 @@
.leftmenus{
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
li{
height: 48px;
line-height: 48px;
height: 52px;
line-height: 52px;
border-bottom: 1px solid #eee;
position: relative;
&:last-child{
border: none;
}
&.active::before{
position: absolute;
content: "";
left: 0px;
height: 30px;
width: 3px;
top:50%;
margin-top: -15px;
background-color: #4d9fef;
}
&.active a,a:hover{
color: #4d9fef;
}
a{
display: block;
padding:0px 20px;
@ -18,4 +32,29 @@
}
}
}
}
.boxshadow{
box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
}
.content{
padding:15px 30px;
font-size: 15px;
line-height: 24px;
text-indent: 2em;
color: #333;
.pre > pre {
font-family: Menlo,Monaco,Consolas,"Courier New",monospace;
padding: 12px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.5;
word-break: break-all;
white-space: pre-wrap;
background-color: #f5f5f5;
border-radius: 0;
border: 1px solid #ccc;
}
.markdown-body table td{
word-break: break-word;
}
}

148
src/mulan/license/PSL.jsx Normal file
View File

@ -0,0 +1,148 @@
import React, { useEffect, useState } from 'react';
import Title from '../../forge/Component/Title';
import RenderHtml from '../../components/render-html';
import { Dropdown , Menu } from 'antd';
import { Link } from 'react-router-dom';
const list = {
1:`<p><strong>木兰宽松许可证, 第1版</strong></p>
<p style={{marginBottom:"20px"}}>2019年8月</p>
<p style={{textIndent:"2em"}}>您对软件的复制使用修改及分发受木兰宽松许可证第1版本许可证的如下条款的约束</p>
<p><strong>0.&nbsp;&nbsp;&nbsp;定义</strong></p>
<div style={{textIndent:"2em"}}>
<p><strong>软件</strong>是指由贡献构成的许可在本许可证下的程序和相关文档的集合</p>
<p><strong>贡献者</strong>是指将受版权法保护的作品许可在本许可证下的自然人或法人实体</p>
<p><strong>法人实体</strong>是指提交贡献的机构及其关联实体</p>
<p><strong>关联实体</strong>是指本许可证下的一方而言控制受控制或与其共同受控制的机构此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权资金或其他有价证券</p>
<p><strong>贡献</strong>是指由任一贡献者许可在本许可证下的受版权法保护的作品</p>
</div>
<p><strong>1.&nbsp;&nbsp;&nbsp;授予版权许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的版权许可您可以复制使用修改分发其贡献不论修改与否</p>
</div>
<p><strong>2.&nbsp;&nbsp;&nbsp;授予专利许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的根据本条规定撤销除外专利许可供您制造委托制造使用许诺销售销售进口其贡献或以其他方式转移其贡献前述专利许可仅限于贡献者现在或将来拥有或控制的其贡献本身或其贡献与许可贡献时的软件结合而将必然会侵犯的专利权利要求不包括仅因您或他人修改贡献或其他结合而将必然会侵犯到的专利权利要求如您或您的关联实体直接或间接地包括通过代理专利被许可人或受让人软件或其中的贡献对任何人发起专利侵权诉讼包括反诉或交叉诉讼或其他专利维权行动指控其侵犯专利权本许可证授予您对软件的专利许可自您提起诉讼或发起维权行动之日终止</p>
</div>
<p><strong>3.&nbsp;&nbsp;&nbsp;无商标许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>本许可证不提供对贡献者的商品名称商标服务标志或产品名称的商标许可但您为满足第4条规定的声明义务而必须使用除外</p>
</div>
<p><strong>4.&nbsp;&nbsp;&nbsp;分发限制</strong></p>
<div style={{textIndent:"2em"}}>
<p>您可以在任何媒介中将软件以源程序形式或可执行形式重新分发不论修改与否但您必须向接收者提供本许可证的副本并保留软件中的版权商标专利及免责声明</p>
</div>
<p><strong>5.&nbsp;&nbsp;&nbsp;免责声明与责任限制</strong></p>
<div style={{textIndent:"2em"}}>
<p>软件及其中的贡献在提供时不带任何明示或默示的担保在任何情况下贡献者或版权所有者不对任何人因使用软件或其中的贡献而引发的任何直接或间接损失承担责任不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性</p>
</div>
<p><strong>条款结束</strong></p>
<p><strong>如何将木兰宽松许可证第1版应用到您的软件</strong></p>
<p>如果您希望将木兰宽松许可证第1版应用到您的新软件为了方便接收者查阅建议您完成如下三步</p>
<p>1 请您补充如下声明中的空白包括软件名软件的首次发表年份以及您作为版权人的名字</p>
<p>2 请您在软件包的一级目录下创建以LICENSE为名的文件将整个许可证文本放入该文件中</p>
<p>3 请将如下声明文本放入每个源文件的头部注释中</p>
<pre>Copyright (c) [2019] [name of copyright holder]
[Software Name] is licensed under the Mulan PSL v1.
You can use this software according to the terms and conditions of the Mulan PSL v1.
You may obtain a copy of Mulan PSL v1 at:
http://license.coscl.org.cn/MulanPSL
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
PURPOSE.
See the Mulan PSL v1 for more details.</pre>`,
2:`<p><strong>木兰宽松许可证, 第2版</strong></p>
<p style={{marginBottom:"20px"}}>2020年1月</p>
<p style={{textIndent:"2em"}}>您对软件的复制使用修改及分发受木兰宽松许可证第2版本许可证的如下条款的约束</p>
<div style={{textIndent:"2em"}}>
<p><strong>0.&nbsp;&nbsp;&nbsp;定义</strong></p>
<p><strong>软件</strong> 是指由贡献构成的许可在本许可证下的程序和相关文档的集合</p>
<p><strong>贡献</strong> 是指由任一贡献者许可在本许可证下的受版权法保护的作品</p>
<p><strong>贡献者</strong> 是指将受版权法保护的作品许可在本许可证下的自然人或法人实体</p>
<p><strong>法人实体</strong> 是指提交贡献的机构及其关联实体</p>
<p><strong>关联实体</strong> 是指本许可证下的行为方而言控制受控制或与其共同受控制的机构此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权资金或其他有价证券</p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>1.&nbsp;&nbsp;&nbsp;授予版权许可</strong></p>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的版权许可您可以复制使用修改分发其贡献不论修改与否</p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>2.&nbsp;&nbsp;&nbsp;授予专利许可</strong></p>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的根据本条规定撤销除外专利许可供您制造委托制造使用许诺销售销售进口其贡献或以其他方式转移其贡献前述专利许可仅限于贡献者现在或将来拥有或控制的其贡献本身或其贡献与许可贡献时的软件结合而将必然会侵犯的专利权利要求不包括对贡献的修改或包含贡献的其他结合如果您或您的关联实体直接或间接地软件或其中的贡献对任何人发起专利侵权诉讼包括反诉或交叉诉讼或其他专利维权行动指控其侵犯专利权本许可证授予您对软件的专利许可自您提起诉讼或发起维权行动之日终止</p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>3.&nbsp;&nbsp;&nbsp;无商标许可</strong></p>
<p>本许可证不提供对贡献者的商品名称商标服务标志或产品名称的商标许可但您为满足第4条规定的声明义务而必须使用除外</p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>4.&nbsp;&nbsp;&nbsp;分发限制</strong></p>
<p>您可以在任何媒介中将软件以源程序形式或可执行形式重新分发不论修改与否但您必须向接收者提供本许可证的副本并保留软件中的版权商标专利及免责声明</p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>5.&nbsp;&nbsp;&nbsp;免责声明与责任限制</strong></p>
<p><strong>软件及其中的贡献在提供时不带任何明示或默示的担保在任何情况下贡献者或版权所有者不对任何人因使用软件或其中的贡献而引发的任何直接或间接损失承担责任不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性</strong></p>
</div>
<div style={{textIndent:"2em"}}>
<p><strong>6.&nbsp;&nbsp;&nbsp;语言</strong></p>
<p><strong>本许可证以中英文双语表述中英文版本具有同等法律效力如果中英文版本存在任何冲突不一致以中文版为准</strong></p>
</div>
<p style={{marginBottom:"20px"}}><strong>条款结束</strong></p>
<p><strong>如何将木兰宽松许可证第2版应用到您的软件</strong></p>
<p>如果您希望将木兰宽松许可证第2版应用到您的新软件为了方便接收者查阅建议您完成如下三步</p>
<p>1 请您补充如下声明中的空白包括软件名软件的首次发表年份以及您作为版权人的名字</p>
<p>2 请您在软件包的一级目录下创建以LICENSE为名的文件将整个许可证文本放入该文件中</p>
<p>3 请将如下声明文本放入每个源文件的头部注释中</p>
<pre>Copyright (c) [Year] [name of copyright holder]
[Software Name] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.</pre>`
}
function PSL(props){
const [value , setValue ] = useState(undefined);
const id = props.match.params.id;
useEffect(()=>{
if(id && id!==value){
setValue(parseInt(id));
console.log(id);
}
},[id])
const menus = (
<Menu>
<Menu.Item><Link to={`/license/psl/1`}>第一版</Link></Menu.Item>
<Menu.Item><Link to={`/license/psl/2`}>第二版</Link></Menu.Item>
</Menu>
)
return(
<div>
<Title>木兰宽松许可证<Dropdown overlay={menus} placement="bottomRight"><i className="iconfont icon-sandian font-17 color-grey-9"></i></Dropdown></Title>
<div class="content">
<div className="pre">
{
value &&
<RenderHtml className="break_word_comments imageLayerParent" value={list[value]} url={props.history.location}/>
}
</div>
</div>
</div>
)
}
export default PSL;

View File

@ -1,9 +1,22 @@
import React from 'react';
import Title from '../../forge/Component/Title';
function Preface(props){
return(
<div>序言</div>
<div>
<Title>引言</Title>
<div class="content">
<p>开源Open Source是人类在互联网发展进程中探索出的一种面向全球的大规模协作生产方式它以开放共享合作共赢为宗旨有效地推进了全球化进程当前我国开发者和企业参与开源的热情不断高涨开源产业也逐步完善然而我国面向开源的环境技术人才生态等方面还存在诸多问题推动国内外开源的交流与合作促进产学研用结合保护广大开源参与者的利益造就有影响力可持续发展的开源生态系统是相关行业当前的一项重要任务</p>
<p>开源许可证是对开源软件的使用复制修改和分发等行为进行规范和约束的一种具有法律效力的格式合同是开源运动的基石目前经开源促进会OSI认证的开源软件许可证共有 80 多个它们都由国外或国际组织机构使用英文发布对于来自世界各地的广大开源参与者而言现有许可证中的条款的表述比较晦涩容易因理解有误而违约同时很多许可证对被许可方责任和义务的表述不够完善容易导致难以解决的法律纠纷此外当前国际形势需要来自全球不同地方的更多声音和力量来倡导开源</p>
<p>基于以上考虑北京大学作为国家重点研发计划云计算和大数据开源社区生态系统的子任务牵头单位依托全国信标委云计算标准工作组和中国开源云联盟联合国内开源生态圈产学研各界优势团队开源社区以及拥有丰富知识产权相关经验的众多律师在对现有主流开源协议全面分析的基础上共同起草修订并发布了木兰系列开源许可证</p>
<p>第一发木兰宽松许可证Mulan PSL v1具有以下特点</p>
<p>1许可证内容以中英文双语表述中英文版本具有同等法律效力方便更多的开源参与者阅读使用简化了中国使用者进行法律解释时的复杂度</p>
<p>2许可证明确授予用户永久性全球性免费的非独占的不可撤销的版权和专利许可并针对目前专利联盟存在的互诉漏洞问题明确规定禁止贡献者关联实体直接或间接地通过代理专利被许可人或受让人进行专利诉讼或其他维权行动否则终止专利授权</p>
<p>3许可证明确不提供对贡献者的商品名称商标服务标志等的商标许可保护贡献者的切身利益</p>
<p>4许可证经技术专家和法律专家共同修订在明确合同双方行为约束的前提下尽可能地精简条款优化表述降低产生法律纠纷的风险</p>
<p>贡献单位北京大学中国电子技术标准化研究院西南大学中国科学院软件所开源社中移苏州软件技术有限公司华为技术有限公司华云数据集团有限公司普元信息技术股份有限公司中兴通讯股份有限公司中标软件有限公司等</p>
</div>
</div>
)
}
export default Preface;

View File

@ -0,0 +1,122 @@
import React, { useEffect, useState } from 'react';
import Title from '../../forge/Component/Title';
import RenderHtml from '../../components/render-html';
import { Dropdown , Menu } from 'antd';
import { Link } from 'react-router-dom';
const list = {
1:`<p><strong>木兰公共许可证第1版</strong></p>
<p style={{marginBottom:"2em"}}>2020年12月</p>
<p style={{textIndent:"2em"}}>您对贡献的复制使用修改及分发受木兰公共许可证, 第1版本许可证的如下条款的约束</p>
<p><strong>0.&nbsp;&nbsp;&nbsp;定义</strong></p>
<div style={{textIndent:"2em"}}>
<p><strong>贡献</strong>是指由贡献者许可在本许可证下的受版权法保护的作品包括最初贡献者许可在本许可证下的作品及后续贡献者许可在本许可证下的衍生作品</p>
<p><strong>贡献者</strong>是指将受版权法保护的作品许可在本许可证下的自然人或法人实体</p>
<p><strong>法人实体</strong>是指提交贡献的机构及其关联实体</p>
<p><strong>关联实体</strong>是指本许可证下的行为方而言控制受控制或与其共同受控制的机构此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权资金或其他有价证券</p>
<p><strong>衍生作品</strong>是指基于贡献创作的作品具体包括对全部或部分贡献进行修改重写翻译注释组合或与之链接包括动态链接或静态链接而形成的作品仅与贡献进行进程间通信或系统调用的作品是独立作品不属于衍生作品</p>
<p><strong>对应源代码</strong>是指生成安装和(对于可执行作品)运行目标代码所需的所有源文件和与之关联的接口定义文件以及控制这些活动的脚本但不包括编译环境编译工具云服务平台如果有</p>
<p><strong>分发</strong>是指通过任何媒介向他人提供贡献衍生作品的行为以及利用贡献衍生作品通过网络远程给用户提供服务的行为例如通过利用贡献衍生作品搭建的云服务平台提供在线服务的行为</p>
</div>
<p><strong>1.&nbsp;&nbsp;&nbsp;授予版权许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的版权许可您可以复制使用修改分发贡献衍生作品不论修改与否</p>
</div>
<p><strong>2.&nbsp;&nbsp;&nbsp;授予专利许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>每个贡献者根据本许可证授予您永久性的全球性的免费的非独占的不可撤销的根据本条规定撤销除外专利许可供您制造委托制造使用许诺销售销售进口其贡献或以其他方式转移其贡献前述专利许可仅限于贡献者现在或将来拥有或控制的其贡献中的专利权利要求不包括仅因您或他人修改贡献而将必然会侵犯到的专利权利要求如果您或您的关联实体直接或间接地贡献对任何人发起专利侵权诉讼包括反诉或交叉诉讼或其他专利维权行动指控其侵犯专利权则本许可证授予您对贡献的专利许可自您提起诉讼或发起维权行动之日终止</p>
</div>
<p><strong>3.&nbsp;&nbsp;&nbsp;无商标许可</strong></p>
<div style={{textIndent:"2em"}}>
<p>本许可证不提供对贡献者的商品名称商标服务标志或产品名称的商标许可但您为满足第4条规定的声明义务而必须使用除外</p>
</div>
<p><strong>4.&nbsp;&nbsp;&nbsp;分发限制</strong></p>
<div style={{textIndent:"2em"}}>
<p>您可以在任何媒介中将您接收到的贡献或您的衍生作品以源程序形式或可执行形式重新分发但必须满足下列条件</p>
<p>1您必须向接收者提供本许可证的副本并保留贡献中的版权商标专利及免责声明并且</p>
<p>2如果您分发您接收到的贡献您必须使用本许可证提供该贡献的源代码副本如果您 分发您的衍生作品您必须</p>
<p>i衍生作品向接收者提供使用本许可证分发的您的衍生作品对应源代码如果您通过下载链接提供前述对应源代码则您应将下载链接地址置于衍生作品或其随附文档中的明显位置有效期不少于自该衍生作品分发之日起三年并确保接收者可以获得对应源代码或者</p>
<p>ii衍生作品向接收者提供一个书面要约表明您愿意提供使用本许可证分发的您衍生作品对应源代码书面要约应放在衍生作品中的明显位置并确保接收者根据书面要约可获取对应源代码的时间从您接到该请求之日起不得超过三个月且有效期不少于自该衍生作品分发之日起三年</p>
</div>
<p><strong>5.&nbsp;&nbsp;&nbsp;违约与终止</strong></p>
<div style={{textIndent:"2em"}}>
<p>如果您违反本许可证任何贡献者有权书面通知您终止其依据本许可证授予您的许可贡献者授予您的许可从您接到其终止通知之日起终止但在如下两种情形下即使您收到贡献者的通知也并不终止您的许可</p>
<p>1您在接到终止通知之前已停止所有违反行为</p>
<p>2您是首次收到该贡献者根据本许可证发出的书面终止通知您在收到该通知后30天内停止所有违反行为</p>
<p>只要下游接收者遵守本许可证的相关规定您在本许可证下的许可终止不影响下游接收者根据本许可证享有的权利</p>
</div>
<p><strong>6.&nbsp;&nbsp;&nbsp;例外</strong></p>
<div style={{textIndent:"2em"}}>
<p>如果您将贡献或您的衍生作品与采用GPLv3AGPLv3或前述许可证的后续版本以下简称GPL类许可证的作品结合且根据GPL类许可证的要求您有义务将形成的结合作品以对应的GPL类许可证许可的您可以根据对应的GPL类许可证许可结合作品只要您在分发该结合作品的同时向接收者提供本许可证的副本并保留贡献中的版权商标专利及免责声明任何贡献者不会因您根据前述原因选择GPL类许可证许可而授予该结合作品的接收者更多权利</p>
</div>
<p><strong>7.&nbsp;&nbsp;&nbsp;免责声明与责任限制</strong></p>
<div style={{textIndent:"2em"}}>
<p><strong>贡献在提供时不带任何明示或默示的担保在任何情况下贡献者或版权所有者不对任何人因使用贡献而引发的任何直接或间接损失承担责任不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性</strong></p>
</div>
<p><strong>8.&nbsp;&nbsp;&nbsp;语言</strong></p>
<div style={{textIndent:"2em"}}>
<p><strong>本许可证以中英文双语表述中英文版本具有同等法律效力如果中英文版本存在任何冲突不一致以中文版为准</strong></p>
</div>
<p><strong>条款结束</strong></p>
<p>&nbsp;</p>
<p><strong>如何将木兰公共许可证第1版应用到您的软件</strong></p>
<p>如果您希望将木兰公共许可证第1版应用到您的新软件为了方便接收者查阅建议您完成如下三步</p>
<p>1 请您补充如下声明中的空白包括软件名软件的首次发表年份以及您作为版权人的名字</p>
<p>2 请您在软件包的一级目录下创建以LICENSE为名的文件将整个许可证文本放入该文件中</p>
<p>3 请将如下声明文本放入每个源文件的头部注释中</p>
<pre>Copyright (c) [Year] [name of copyright holder]
[Software Name] is licensed under Mulan PubL v1.
You can use this software according to the terms and conditions of the Mulan PubL v1.
You may obtain a copy of Mulan PubL v1 at:
http://license.coscl.org.cn/MulanPubL-1.0
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PubL v1 for more details.
</pre>`
}
function Public(props){
const [value , setValue ] = useState(undefined);
const id = props.match.params.id;
useEffect(()=>{
if(id && id!==value){
setValue(parseInt(id));
console.log(id);
}
},[id])
const menus = (
<Menu>
<Menu.Item><Link to={`/license/public/1`}>第一版</Link></Menu.Item>
</Menu>
)
return(
<div>
<Title>木兰公共许可证<Dropdown overlay={menus} placement="bottomRight"><i className="iconfont icon-sandian font-17 color-grey-9"></i></Dropdown></Title>
<div class="content">
<div className="pre">
{
value &&
<RenderHtml className="break_word_comments imageLayerParent" value={list[value]} url={props.history.location}/>
}
</div>
</div>
</div>
)
}
export default Public;