首页/文章/ 详情

开源协议全解析:从GPL到Apache,了解你的选择

1月前浏览1227

本文摘要:(由ai生成)
本文介绍了开源协议在软件开发中的重要性,列举了几种常用的开源协议如MIT、Apache、BSD、MPL、LGPL和EPL,并重点阐述了GPL协议的特点、历史、目的、核心原则、传染性、版本、遵守要求以及局限性与商业应用。GPL作为自由软件运动的基石,确保了软件的四大自由,并在保护软件自由和促进开源社区发展方面发挥了重要作用。选择合适的开源协议对于开发者和企业来说至关重要,它们确保了软件自由和创新的平衡。

 现在二次开发拓展越来越广。开发不再仅仅从软件的API开发,而是越来越多地依赖于现有的软件模块来加速开发进程。这些模块使得开发工作更加高效和系统化。

然而,在利用这些模块进行开发时,不可避免地会遇到开源协议的问题。开源协议是一套规定,它们定义了如何使用、修改和分发开源软件。     
在软件开发的世界里,开源协议扮演着至关重要的角色。那么,什么是开源协议呢?
开源协议是一种授权条款,用于规范软件的使用、复 制、修改和分发等行为。它为开发者提供了一种合法的方式来共享他们的代码,同时也保护了他们的权益。

常用的开源协议有多种,其中一些较为知名的包括:GPL(GNU General Public License,GNU 通用公共许可证)、Apache License、MIT License 、BSD Licenses等。这些协议在适用范围、限制条件和授权方式等方面各有不同。

1. MIT License:这是最宽松的开源协议之一,它允许用户几乎无限制地使用、复 制、修改和分发软件,无论是个人还是商业用途。

2. Apache License 2.0:提供了强大的专利保护,适用于商业和非商业项目。要求在分发的软件中保留版权和免责声明。

3. BSD Licenses:包括BSD 2-Clause和BSD 3-Clause两种形式,都非常宽松,允许商业使用和修改,但要求保留版权声明。

4. Mozilla Public License 2.0 (MPL 2.0):要求任何分发的源代码必须以相同许可证发布,同时提供了专利保护。

5. GNU Lesser General Public License (LGPL):适用于库文件,允许商业软件通过链接库的方式使用LGPL代码而不必开源。

6. Eclipse Public License (EPL):适用于Eclipse项目,允许商业和非商业使用,要求分发时提供源代码。


GPL:

GPL是自由软件运动的基石,GPL 是一种具有强烈 copyleft(著作权)性质的开源协议。其主要特点之一是传染性。所谓传染性,是指如果一个软件使用了受 GPL 协议保护的代码,那么这个软件也必须以 GPL 协议开源。这确保了软件的自由传播和不断发展。它的核心目标是确保软件的自由使用、学习和修改,以及保障这些自由在软件的传播中得以延续。

  1. 历史和目的:由自由软件基金会(FSF)发布,旨在保护软件用户的四大自由,GPL 所强调的 “四大自由” 分别是:使用自由、学习自由、修改自由和分发自由。

  • 使用自由意味着任何人都可以使用该软件,无论出于何种目的。

  • 学习自由允许用户查看和理解软件的源代码,从而更好地学习和掌握编程技术。

  • 修改自由使得用户可以根据自己的需求对软件进行修改和定制。

  • 分发自由则确保用户可以将修改后的软件再次分发出去,与他人共享。

2. 核心原则:GPL赋予用户自由运行、学习、分享和改进软件的权利。

3. “传染性”:GPL要求任何包含或基于GPL代码的作品也必须以GPL许可证发布。

4. 版本:GPL有三个主要版本,每个版本都反映了自由软件运动的发展和对现代软件实践的适应。

5. 遵守GPL:开发者必须提供源代码,保留版权和免责声明,并包含GPL许可证副本。

6. 局限性与商业应用:GPL不排斥商业使用,许多公司通过提供技术支持和增值服务实现商业化。

GPL 协议在保护软件自由和促进开源社区发展方面发挥了重要作用。然而,对于一些商业开发者来说,GPL 的传染性可能会带来一些挑战。在选择开源协议时,开发者需要根据自己的项目需求和目标来权衡各种因素。

开源协议是开源生态系统的法律基础,它们确保了软件自由和创新的平衡。GPL作为其中最具标志性的许可证之一,不仅保障了软件的自由,也为商业创新提供了可能。了解并正确应用这些协议,对于开发者和企业来说至关重要。在后续的文章中,我们将继续探索其他开源协议。


来源:TodayCAEer
二次开发通用
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-11-01
最近编辑:1月前
TodayCAEer
本科 签名征集中
获赞 22粉丝 40文章 257课程 0
点赞
收藏
作者推荐

快速学会一项分析-随动载荷-非线性自适应准则和非线性中间结果输出-OS-T:1510

1.FollowerLoads:在OptiStruct中,FollowerLoads指的是那些随着结构变形而变化的载荷。这些载荷可以是集中力或者是作用在元素面上的压力。对于集中力,FollowerLoads不依赖于元素面的面积;因此,无论选择哪种激活选项,结果都将保持不变。而对于压力载荷,则可能依赖于元素面的面积,并且可能需要考虑载荷方向的更新。在非线性分析中,如果将应用的载荷视为跟随载荷,那么载荷的方向和/或综合大小将在整个分析过程中随着几何形状的变化而更新。2.非线性自适应准则(NLADAPT):NLADAPT用于控制非线性分析中的增量步长。它可以设置最大和最小增量步、是否使用固定增量步以及控制不收敛后减小增量步的次数。在非线性分析中,OptiStruct采取的策略是施加增量载荷,迭代求解直至残差小至给定范围内,更新方程然后施加下一个增量载荷。NLADAPT卡片用于设置最大和最小增量步长,以及在给定迭代次数内不收敛后以减小增量步的次数。3.输出非线性运行的中间结果:在非线性分析中,用户可能需要在分析过程中获取中间结果。这可以通过NLOUT卡片来控制,其中可以设置中间结果输出次数和最终结果输出。OptiStruct提供了在非线性分析中输出中间结果的能力,这对于跟踪分析过程和理解结构响应非常有用。用户可以通过设置NLOUT卡片来控制增量输出,包括在小位移非线性和大位移非线性分析中的输出。本教程演示了如何设置FollowerLoads、非线性自适应准则(NLADAPT)和以及如何为非线性分析输出中间结果。在开始之前,请将本教程中使用的文件复制到您的工作目录。http://majorv.help.altair.com/minorv/simulation/tutorials/hwsolvers/optistruct/OS-T-1510/beam_fllwer.ziphttp://majorv.help.altair.com/minorv/simulation/tutorials/hwsolvers/optistruct/OS-T-1510/disk_fllwer.zip您将看到FollowerLoads的激活如何导致模型行为和结果的显著差异,以及如果不考虑Followerload机制,可能会输出多么不准确的结果。您将看到集中力(梁模型)和压力(橡胶盘模型)的FollowerLoads的激活。图1.模型图示:FollowerLoads。集中力-梁(左),压力-橡胶盘模型(右)一、启动HyperMesh并设置OptiStruct用户配置文件1.启动HyperMesh。此时将打开UserProfile对话框。2.选择OptiStruct,然后单击OK。这将加载用户配置文件。它包括相应的模板、宏菜单和导入阅读器,将HyperMesh的功能缩减为与生成OptiStruct模型相关的功能。二、设置梁模型梁模型是由CHEXA单元构成的弯曲钢梁。对梁的顶部横截面施加100N的力。梁的底部受单点约束(SPC)的约束。2.1导入模型1.点击File>Import>SolverDeck。导入选项卡将添加到您的选项卡菜单中。2.对于Filetype,选择OptiStruct。3.选择文件图标。此时将打开SelectOptiStruct文件Browser。4.选择保存到工作目录的beam_fllwer.fem文件。5.单击Open。6.单击Import,然后单击Close以关闭Import选项卡。2.2提交作业而不激活FollowerLoads导入的模型已经包含材料、属性、边界条件、大位移的激活和LoadStep。在此Step中,您将直接运行模型以生成结果。1.在Analysis页面中,输入OptiStruct面板。图2.访问OptiStruct面板2.单击inputfile字段后面的saveas。此时将打开SaveAs对话框。3.选择要写入OptiStruct模型文件的目录,然后在Filename字段中输入模型名称beam_fllwer.fem。对于OptiStruct求解器模型,建议使用.fem扩展名。4.单击Save。beam_fllwer.fem文件的名称和位置将显示在输入文件字段中。5.将导出选项切换设置为all。6.将runoptions切换设置为analysis。7.将内存选项切换设置为memorydefault。8.单击OptiStruct。这将启动OptiStruct作业。如果作业成功,则新结果文件应位于从beam_fllwer.fem中选择的目录中。beam_fllwer.out文件是查找错误消息的好地方,如果存在任何错误,这些错误消息可以帮助调试输入模型。2.3设置模型2.3.1.激活FollowerLoads集中力的FollowerLoads不取决于它们所应用网格的单元面的面积。因此,对于在FLLWERBulkDataEntry或PARAM,FLLWER条目上选择的任何激活选项,结果将保持不变。由于您只有一个SUBCASE,因此选择参数PARAM,FLLWER来激活该模型的FollowerLoads。1.在ModelBrowser的Cards文件夹中,单击PARAM。PARAM条目将显示在EntityEditor中。2.激活FollowerLoads。a.选中FLLWER旁边的框。b.将VALUE设置为1。选项1、2和3对集中载荷具有相同的效果,因为不涉及单元面区域。使用该参数而不是BulkEntry可激活模型中所有SUBCASE的Follower加载。如果您只想为特定SUBCASE激活FollowerLoads,则可以使用FLLWERBulkData和SUBCASE条目。图3.2.3.2.激活非线性自适应条件允许您定义非线性自适应准则的参数可通过NLADAPT批量数据和SUBCASE条目获得。如果遇到收敛问题,通常可以为非线性分析指定时间步长和收敛标准。请参阅本练习中的NCUTS参数。同样,您可以定义DTMIN和DTMAX参数,其他一些参数(如NOPCL和NSTSL)适用于带接触的模型。1.创建loadstepinput。a.在ModelBrowser中,右键单击并选择Create>LoadStepInputs。b.对于Name,输入NLADAPT。c.对于Configtype,选择TimestepParameters。默认类型为NLADAPTd.选中NCUTS旁边的框,然后在VALUE字段中输入5(默认)。这向OptiStruct表明,允许减少时间增量的最大缩减次数为5。如果迭代收敛的特定时间增量需要更多的削减,则OptiStruct将出错。图4.2.编辑NonlinearStaticloadStep。a.单击NonlinearStaticLoadStep以在EntityEditor中打开。b.单击NLADAPT旁边的字段,然后单击LoadstepInputs。图5.c.在SelectLoadstepInputs对话框中,选择NLADAPT,然后单击OK。图6.2.3.3.激活非线性中间结果允许您激活NonlinearIntermediateResults的参数可通过NLOUTBulkData和Subcase条目获得。输出中间结果的间隔数由NINT参数控制。SVNONCNV参数可用于激活/停用非收敛解的结果输出。目前默认开启(设置为YES)。1.创建loadstepinput。a.在ModelBrowser中,右键单击并选择Create>LoadStepInputs。b.对于Name,输入NLOUT。c.对于Configtype,选择Outputparameters。默认类型为NLOUT。d.选中NINT旁边的框,然后在VALUE字段中输入10(默认值)。这向OptiStruct指示请求中间结果的最大间隔数为10。如果从任何Loadsn到Loadsn+1的Loads增量大于1/NINT(在这种情况下,1/10为0.1),则与Loads级别n+1对应的结果将被保存以供输出;否则,不会保存结果。Note:这个参数在增量迭代求解过程中无法控制自适应Loads大小的选择。它仅指定在求解过程中保存结果以供输出的间隔数。2.编辑NonlinearStaticloadStep。a.单击NonlinearStaticloadStep以在EntityEditor中打开。b.单击NLOUT旁边的字段,然后单击LoadstepInputs。图7.c.在SelectLoadstepInputs对话框中,选择NLOUT,然后单击OK。图8.2.4使用FollowerLoads激活提交作业该模型现在由已被标识为FollowerLoads的Loads组成。此外,您还学习了如何激活非线性分析的自适应标准,以及如何以中间增量请求结果。1.在Analysis页面中,输入OptiStruct面板。图9.访问OptiStruct面板2.单击inputfile字段后面的saveas。此时将打开SaveAs对话框。3.选择要写入OptiStruct模型文件的目录,然后在Filename字段中输入模型名称beam_fllwer_ON.fem。对于OptiStruct求解器模型,建议使用.fem扩展名。4.单击Save。beam_fllwer_ON.fem文件的名称和位置将显示在输入文件字段中。5.将导出选项切换设置为all。6.将runoptions切换设置为analysis。7.将内存选项切换设置为memorydefault。8.单击OptiStruct。这将启动OptiStruct作业。如果作业成功,则新结果文件应位于从中选择beam_fllwer_ON.fem的目录中。beam_fllwer_ON.out文件是查找错误消息的好地方,如果存在任何错误,这些错误消息可以帮助调试输入模型。2.5查看结果位移和单元应力是默认计算的,可以使用HyperView中的云图面板进行绘制。比较未激活FollowerLoad的模型之间的位移结果。1.启动HyperView。2.单击此按钮可将页面拆分为两个窗口。3.通过单击并导航到您的工作目录来加载结果文件。a.在第一个窗口中,加载beam_fllwer.h3d文件。b.在第二个窗口中,加载beam_fllwer_ON.h3d文件。4.为每个窗口设置云图。a.单击窗口以将其激活,然后单击工具栏上的。b.将Resulttype设置为Displacement(v)。c.单击Apply。Note:既然你已经通过NLOUT请求了中间迭代的结果,你会看到所有中间迭代的结果。5.在ResultsBrowser中,点击LoadFactor,然后选择最终增量LoadFactor=1.000000E+00。图10.此时将显示Displacementcontour结果。您可以看到,从动力的激活显著改变了位移分布。图11.三、设置橡胶盘模型橡胶盘对由MATHE单元构成的橡胶盘进行建模。对橡胶盘施加1N/mm2的压力Loads。磁盘的圆周通过单点约束(SPC)进行约束。3.1导入模型1.点击File>Import>SolverDeck。导入选项卡将添加到您的选项卡菜单中。2.对于Filetype,选择OptiStruct。3.选择文件图标。此时将打开SelectOptiStruct文件Browser。4.选择保存到工作目录的disk_fllwer.fem文件。5.单击Open。6.单击Import,然后单击Close以关闭Import选项卡。3.2设置模型3.2.1.创建FollowerLoadBulkData条目在梁模型中,集中力的FollowerLoads不取决于它们所应用网格的单元面的面积。因此,对于在FLLWERBulkDataEntry或PARAM,FLLWER条目上选择的任何激活选项,结果将保持不变。此外,由于您只有一个SUBCASE,因此选择参数PARAM,FLLWER来激活该模型的FollowerLoads。在此圆盘模型中,Loads是压力Loads,这可能取决于它们所施加的单元面的面积。此外,您还有多个SUBCASE来展示不同FLLWER选项的效果。在OptiStruct帮助的FLLWER批量数据输入中,您将看到OPT参数,其中包含以下用于计算FollowerLoads的选项:=-1,0根据推杆力计算未激活。=1(默认)Follower效果已激活。对于压力Loads,在求解过程中,单元表面积和Loads方向都会更新。对于集中力,仅更新力方向。=2Follower效果已激活。对于压力Loads,在求解过程中仅更新单元表面积(不更新Loads方向)。对于集中力,只涉及力方向,这与OPT=1相同。=3Follower效果已激活。对于压力Loads,仅更新Loads方向(不更新单元表面积)。对于集中力,仅更新力方向,这与OPT=1相同。在ModelBrowser中,右键单击并选择Create>LoadCollector。默认的loadcollectorTemplate将显示在EntityEditor中。1.对于Name,输入FLLWER_1。2.将CardImage设置为FLLWER。3.将OPT设置为1。图12.4.再创建两个名为FLLWER_2和FLLWER_3的LoadCollector。a.将CardImage设置为FLLWER。b.将OPT设置为2表示FLLWER_2,将OPT设置为3表示FLLWER_3。3.2.2.引用FLLWERBulk条目现在应在Subcase部分中选择创建的FLLWER批量数据条目。1.编辑fllwer_1LoadStep。a.在ModelBrowser的LoadSteps文件夹中,点击fllwer_1。LoadStep将显示在EntityEditor中。b.选中FLLWER旁边的框。c.对于ID,单击Unspecified>Loadcol。在SelectLoadcol对话框中,选择FLLWER_1,然后单击OK。图13.2.编辑fllwer_2LoadStep。a.在ModelBrowser的LoadSteps文件夹中,点击fllwer_2。LoadStep将显示在EntityEditor中。b.选中FLLWER旁边的框。c.对于ID,单击Unspecified>Loadcol。在SelectLoadcol对话框中,选择FLLWER_2,然后单击OK。3.编辑fllwer_3LoadStep。a.在ModelBrowser的LoadSteps文件夹中,点击fllwer_3。LoadStep将显示在EntityEditor中。b.选中FLLWER旁边的框。c.对于ID,单击Unspecified>Loadcol。在SelectLoadcol对话框中,选择FLLWER_3,然后单击OK。3.2.3.激活非线性中间结果允许您激活NonlinearIntermediateResults的参数可通过NLOUTBulkData和SubcaseEntries获得。输出中间结果的间隔数由NINT参数控制。SVNONCNV参数可用于激活/停用非收敛解的结果输出。目前默认开启(设置为YES)。1.创建loadstepinput。a.在ModelBrowser中,右键单击并选择Create>LoadStepInputs。b.对于Name,输入NLOUT。c.对于Configtype,选择OutputParameters。默认类型为NLOUT。d.选中NINT旁边的框,在VALUE字段中输入10(Default)。这向OptiStruct指示请求中间结果的最大间隔数为10。如果从任何Loadsn到Loadsn+1的Loads增量大于1/NINT(在这种情况下,1/10为0.1),则与Loads级别n+1对应的结果将被保存以供输出;否则,不会保存结果。Note:这个参数在增量迭代求解过程中无法控制自适应Loads大小的选择。它仅指定在求解过程中保存结果以供输出的间隔数。图14.2.编辑fllwer_1LoadStep。a.在ModelBrowser的LoadSteps文件夹中,点击fllwer_1。b.对于NLOUT,单击Unspecified>Loadstepinputs。c.在SelectLoadstepInputs对话框中,选择NLOUT,然后单击OK。图15.3.编辑fllwer_2、fllwer_3和NO_fllwerLoadStep。a.在ModelBrowser的LoadSteps文件夹中,点击要编辑的LoadStep。LoadStep将显示在EntityEditor中。b.对于NLOUT,单击Unspecified>Loadstepinputs。c.在SelectLoadstepInputs对话框中,选择NLOUT,然后单击OK。3.3提交DiskModel的Job该模型现在由已被标识为FollowerLoads的Loads组成。此外,您还学习了如何以中间增量请求结果。1.在Analysis页面中,输入OptiStruct面板。图16.访问OptiStruct面板2.单击inputfile字段后面的saveas。此时将打开SaveAs对话框。3.选择要写入OptiStruct模型文件的目录,然后在Filename字段中输入模型名称disk_fllwer.fem。对于OptiStruct求解器模型,建议使用.fem扩展名。4.单击Save。disk_fllwer.fem文件的名称和位置将显示在输入文件字段中。5.将导出选项切换设置为all。6.将runoptions切换设置为analysis。7.将内存选项切换设置为memorydefault。8.单击OptiStruct。这将启动OptiStruct作业。如果作业成功,则新结果文件应位于从disk_fllwer.fem中选择的目录中。disk_fllwer_ON.out文件是查找错误消息的好地方,如果存在任何错误,这些错误消息可以帮助调试求解器模型。3.4查看结果位移和单元应力是默认计算的,可以使用HyperView中的云图面板进行绘制。比较激活和未激活FollowerLoad的模型之间的位移结果。1.启动HyperView。2.单击此按钮可将页面拆分为两个窗口。3.将结果从Subcase1加载到第一个窗口。a.单击第一个窗口将其激活。b.通过单击加载结果文件。在面板区域中,加载disk_fllwer_ON.h3d结果文件,然后单击Apply。c.在ResultsBrowser中,选择Subcase1(fllwer_1)和LoadFactor=1.000000E+00。图17.4.加载来自其余SUBCASE的结果。a.激活第二个窗口并加载disk_fllwer_ON.h3d结果文件。在ResultsBrowser中,选择Subcase2(fllwer_2)。b.激活第三个窗口并加载disk_fllwer_ON.h3d结果文件。在ResultsBrowser中,选择Subcase2(fllwer_3)。c.激活第四个窗口并加载disk_fllwer_ON.h3d结果文件。在ResultsBrowser中,选择Subcase2(NO_fllwer)。5.为每个窗口设置云图。a.单击窗口以将其激活,然后单击工具栏上的。b.将Resulttype设置为Displacement(v)。c.单击Apply。Note:既然你已经通过NLOUT请求了中间迭代的结果,你会看到所有中间迭代的结果。此时将显示Displacementcontour结果。您可以看到,从动力的激活显著改变了位移分布。此外,我们还可以看到,由于SUBCASE3(OPT=3)更新了Loads方向,但更新了面积,因此SUBCASE3在网格点处的力(Pressure*Area)分布很低,与OPT=1和2相比,位移结果反映了这一点。图18.来源:TodayCAEer

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈