Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记
使用Flutter私有类涉及的授权协议问题

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/138330726
HuaWei:https://bbs.huaweicloud.com/blogs/426628

【介绍】:本文是一个杂谈,关于使用Flutter私有类涉及的授权协议问题。

flutter-ljc


1. 概述

在我最近的一个项目中,我需要使用 Flutter 框架来开发一个具有复杂图形界面的移动应用。在实现过程中,我发现 Flutter 框架内部的一个私有类 _StarGenerator 非常适合我需要实现的功能。这个类能够生成定制的星形图形,正是我所需要的。然而,由于 _StarGenerator 是一个私有类,直接使用它涉及到一些授权协议的问题。

Flutter 是开源的,遵循 BSD-style 许可协议,这意味着可以自由使用、修改和分发其源代码。但是,使用时需要遵守一些特定的条件,包括保留原始的版权声明,添加必要的许可声明,并且不能使用 Google 或 Flutter 的商标,除非得到明确的书面许可。

因此,我面临的问题是如何合法地使用这个私有类,同时遵守 Flutter 的授权协议。这不仅是一个技术问题,也是一个法律问题,需要我仔细考虑如何处理。在这篇文章中,我将详细探讨使用 Flutter 私有类时涉及的授权协议问题,并分享我如何解决这一问题的经验。

2. 关于Flutter使用的BSD-style协议

2.1 协议内容

Flutter 协议地址为:https://github.com/flutter/flutter/blob/master/LICENSE,内容全文如下:

Copyright 2014 The Flutter Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

其中文翻译为::

版权所有 2014 年 Flutter 作者。保留所有权利。

在源代码和二进制形式的再分发和使用中,无论是否进行修改,只要满足以下条件,均允许:

源代码的再分发必须保留上述版权声明、条件列表和以下免责声明。

二进制形式的再分发必须在文档和/或其他提供的材料中重现上述版权声明、条件列表和以下免责声明。

未经特定事先书面许可,不得使用 Google 公司或其贡献者的名称来认可或推广从本软件衍生的产品。

本软件由版权所有者和贡献者“按原样”提供,不提供任何明示或暗示的担保,包括但不限于对适销性和特定用途的适用性的担保。在任何情况下,版权所有者或贡献者均不对任何直接、间接、附带、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购、使用、数据或利润损失,或业务中断)承担责任,无论是在合同、严格责任还是侵权行为(包括疏忽或其他方式)的任何理论下,即使已被告知可能发生此类损害。

2.2 协议要点

Flutter 使用的 BSD-style 许可协议是一种非常宽松的开源许可协议,它允许个人和组织在几乎没有限制的情况下使用、修改和分发软件。然而,为了合法地使用 Flutter 框架及其组件,需要遵守以下几个关键要点:

  1. 版权声明保留:在使用 Flutter 源代码或其衍生产品时,必须保留原始的版权声明。这意味着在源代码的再分发中,无论是修改后还是未修改,都必须包含原始的版权声明和免责声明。

  2. 文档和材料中的版权声明:在以二进制形式分发软件时,必须在随软件提供的文档和其他材料中复制版权声明、条件列表和免责声明。这确保了使用者在接收到二进制文件时,也能明确了解到其使用条件和限制。

  3. 商标使用限制:许可协议明确禁止未经授权使用 Google 或其贡献者的名字来推广从 Flutter 框架衍生的产品。这意味着,除非得到 Google 的明确书面许可,否则不能在任何产品推广或广告中使用 Google 的名字。

  4. 免责声明:Flutter 框架和所有相关组件都是在“按原样”基础上提供的,不附带任何形式的明示或暗示的保证。这包括但不限于对商品的适销性和特定用途的适用性的暗示保证。这意味着开发者在使用 Flutter 框架时,需要自行承担使用风险。

  5. 责任限制:在任何情况下,Flutter 的版权所有者或贡献者都不会对任何直接或间接的损害负责,无论这些损害是如何引起的,也不论责任理论如何(包括合同责任、严格责任或侵权行为(包括疏忽或其他))。

3. 使用Flutter中未暴露的成员

在Flutter开发中,我们经常会遇到框架内部定义的私有成员或类,这些成员虽然在框架的内部被广泛使用,但并没有在公共API中暴露。这些私有成员包括函数、变量以及类等。虽然这些私有成员可能非常适合我们的需求,直接使用它们却涉及到一些特定的风险和限制。

3.1 风险

  1. 兼容性问题:私有成员在未来的Flutter版本中可能会被修改或完全移除。因为它们不是公开的API的一部分,Flutter开发团队不保证这些私有成员的稳定性和向后兼容性。这意味着依赖这些私有成员的应用或库可能在未来的Flutter更新后无法正常工作。

  2. 维护难度:使用未公开的成员会使得代码的维护变得更加困难。如果这些成员的实现发生变化,开发者需要投入额外的时间和资源来调整自己的应用以适应这些变化。

  3. 法律和许可问题:虽然Flutter的BSD许可证允许修改和再分发代码,但直接复制和修改Flutter框架内部的代码可能需要在项目中包含适当的版权声明和许可声明,这增加了合规的复杂性。

3.2 解决方案

3.2.1 寻找公开的替代方案

在使用私有成员之前,应首先寻找是否有公开的API可以达到同样的目的。Flutter社区和官方文档是获取这些信息的好资源。

3.2.2复制代码直接使用

如果必须使用某些私有功能,我们需要考虑许可和版权问题。

根据 Flutter 的许可协议(BSD-style license),你可以自由地使用、修改和分发 Flutter 框架的源代码,但需要遵守以下条件:

  1. 保留原始的版权声明。

  2. 在你的代码中添加一个许可声明,说明你的代码基于 Flutter 框架,并提供一个链接到 Flutter 的许可协议。

  3. 你不能使用 Google 或 Flutter 的商标,除非得到明确的书面许可。

因此,如果你直接复制了某个私有类的实现,你需要:

  1. 保留该私有类中原有的版权声明(如果有的话)。

  2. 在你的代码中添加一个许可声明,说明你的代码基于 Flutter 框架,并提供一个链接到 Flutter 的许可协议。例如,一个模板如下:

// Copyright 2023 Your Name. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This code is based on the Flutter framework.
// Flutter is licensed under the BSD-style license:
// https://github.com/flutter/flutter/blob/master/LICENSE

// 下面是代码直接使用了Flutter私有成员的代码

4. 结论

在本文中,我们探讨了使用 Flutter 框架中未公开的私有类和成员时涉及的授权协议问题。详细分析 Flutter 的 BSD-style 许可协议,讨论了直接使用 Flutter 私有成员的潜在风险。

不过虽然使用 Flutter 私有类和成员可能在某些情况下看似方便,但要考虑遵守开源协议的规定、维护代码的兼容性和可维护性,以及避免潜在的法律风险才是更为稳妥和可持续的做法。

最后,开发者应当在充分理解相关许可协议的基础上,做出明智的技术和法律选择,以确保他们的项目既能利用到 Flutter 强大的功能,同时也符合开源社区的规范和精神。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589908.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

202012青少年软件编程(Python)等级考试试卷(一级)

第 1 题 【单选题】 运行下方代码段,输出是6,则输入的可能是( )。 a eval(input())print(a)A :8%2 B :8/2 C :3*2 D :3**2 正确答案:C 试题解析: 第 2 题 【单选题】 关于Python变量,下列叙述正确的是&#x…

中仕公考:北京额度管理(社会化/员额制)教师和在编教师的区别

一、什么是额度管理(社会化/员额制)教师? 社会化、员额制教师、额度管理教师,是为了解决中小学教师总量或编制不足,在现有编制基础上另外核定一定数额由地方政府保障,不纳入编制管理,另外实行专项管理。不办理入编手续&#xff…

自定义表单元素组件内容变化触发ElForm重新校验

对于下图中“付费类型”怎么实现有很多种方式,我能想到的是以下两种: Element Plus的RadioButton自定义组件 1. RadioButton 它本质上就是一个单选组件,它跟Element Plus的RadioButton本质上没有区别,无非是外观上的差别。那么…

Windows计算机安装并连接Linux系统(VMware、XShell)

一、Windows计算机可以通过VMware虚拟机,安装Linux系统 说明:VMware Workstation虚拟化软件,在Windows或Linux计算机运行的应用程序,可模拟基于X86的标准PC环境,构建的虚拟机和真实的物理主机没太大区别(区…

自学Vue3 Day2

一、组合式Api组件通信 1.父与子之间 父传子:父导入子组件,定义好数据,子组件用props接收,这里defineProps底层本质还是props. 注意模板渲染过程不需要写props 子传 父: 2.模版引用(ref)和组…

MySQL:设置唯一索引还是出现重复数据

一、MySQL中null和null不相等 MySQL中:两个值比较会出现:true、false、null 三种情况; null和null相比较会出现未知的类型 二、然后看完这个视频 美团二面:我记得明明加了mysql唯一索引,为啥还会出现重复数据吗&…

PHP的数组练习实验

实 验 目 的 掌握索引和关联数组,以及下标和元素概念; 掌握数组创建、初始化,以及元素添加、删除、修改操作; 掌握foreach作用、语法、执行过程和使用; 能应用数组输出表格和数据。 任务1:使用一维索引数…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章 0:00 - 预测,采样,重复:预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层:…

(一)JSP教程——JSP脚本标签

JSP脚本标签 JSP脚本标签通常用作对象操作和数据运算,从而动态地生成页面内容。这里有三种类型的脚本标签:声明、代码段和表达式。 JSP声明 JSP声明一个或多个变量、方法,供以后的代码使用。必须先对变量和方法进行声明,才能使用…

golang学习笔记(内存逃逸分析)

golang的内存逃逸 逃逸分析( Escape analysis) 是指由编译器决定内存分配的位置, 不需要程序员指定。 函数中申请一个新的对象。 如果分配在栈中, 则函数执行结束可自动将内存回收;如果分配在堆中, 则函数…

微软开源 MS-DOS「GitHub 热点速览」

上周又是被「大模型」霸榜的一周,各种 AI、LLM、ChatGPT、Sora、RAG 的开源项目在 GitHub 上“争相斗艳”。这不 Meta 刚开源 Llama 3 没几天,苹果紧跟着就开源了手机端大模型:CoreNet。 GitHub 地址:github.com/apple/corenet 开…

网络安全前置知识-linux操作系统

计算机体系结构 计算机发展历史 计算机组成 计算机硬件组成 1. CPU 原文链接:https://blog.csdn.net/stone_fall/article/details/88414017 一条指令的执行过程分为以下5个周期: 取指令周期(Instruction Fetch,IF&#xff…

【Cpp】类和对象

标题:【Cpp】类和对象 水墨不写bug 正文开始: (一)面向过程与面向对象 面向过程和面向对象是两种不同的编程思想。 面向过程指的是将程序分解成多个步骤,每个步骤都是一个独立的函数,通过函数之间的调用实…

使用OneAPI创建LLM访问API Key

OneAPI 是一个能替代 springdoc-openapi/Swagger 的 API 生产工具,既不需要修改后端代码,也不需要启动应用。 也支持导出 OpenAPI 3.0 协议数据,方便在其他工具中消费。 前面我们介绍了LobeChat需要配置LLM的API访问Key,今天你可…

《架构即未来》读后感

目录 一、引言 二、《架构即未来》读后感 1、主题的简要介绍 2、我的看法和理解 3、作者的优点和传递的信息 4、思想如何适用于当今社会 三、《架构即未来》对于企业发展的影响具体体现在哪些方面? 一、引言 任何一个持续成长的公司最终都需要解决系统、组织…

【讲解下如何解决一些常见的 Composer 错误】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分,它主要用于处理企业内部文件向外部传输的流程,确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括: 1、防止数据泄露:通过严格的审批流程和安全策略&…

【强训笔记】day7

NO.1 思路:双指针模拟,begin表示最长数字字符串最后一个字符,而len表示数字字符串的长度,i用来遍历,如果为数字,那么定义j变量继续遍历,直到不为数字,i-j如果大于len,就…

LabVIEW机械臂控制与图像处理示教平台

LabVIEW机械臂控制与图像处理示教平台 随着工业自动化技术的快速发展,工业机器人在制造业中的应用越来越广泛,它们在提高生产效率、降低人工成本以及保证产品质量方面发挥着重要作用。然而,传统的工业机器人编程和操作需要专业知识&#xff…