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

news2024/11/26 0:32:18
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 强大的功能,同时也符合开源社区的规范和精神。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…

Word文件导出为PDF

Word文件导出为PDF 方法一、使用Word自带另存为PDF功能 打开需要转换为PDF格式的Word文件,依次点击【文件】➡【另存为】➡选择文件保存类型为.PDF 使用这种方法导出的PDF可能存在Word中书签丢失的情况,在导出界面点击,选项进入详细设置 勾…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目,获取 Network App running at:- Local: http://localhost:8080/ -…

C语言--贪吃蛇小游戏

目录 一、Win32API介绍 1.1Win32API 1.2控制台程序 1.3控制台屏幕上的坐标COORD 1.4GetStdHandle 1.5GetConsoleCursorInfo 1.6 CONSOLE_CURSOR_INFO 1.7 SetConsoleCursorInfo 1.8SetConsoleCursorPosition 1.9GetAsyncKeyState 二、贪吃蛇游戏设计与分析 2.1地图 …

设计模式之MVC模式

在编程江湖闯荡多年,我手中打磨过的设计模式多如繁星,但论及经典与实用, MVC(Model-View-Controller)模式 绝对是个中翘楚!它不仅是Web应用的骨架,更是软件架构的智慧结晶。今天,咱们…

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建(windows)基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…

全新TOF感知RGBD相机 | 高帧率+AI,探索3D感知新境界

海康机器人在近期的机器视觉新品发布会上推出的全新TOF感知RGBD相机,无疑是对当前机器视觉技术的一次革新。这款相机不仅融合了高帧率、轻松集成、体积小巧以及供电稳定等诸多优点,更重要的是,它将AI与3D感知技术完美结合,通过高帧率+AI算法,实现了对不同场景的快速捕捉与…

莫比乌斯变换的数学原理

一、说明 关于莫比乌斯变换,是一个代数几何变换的重要概念。也是双曲几何的重要理论,比如庞加莱盘就是建立在这个理论上,那么这个变换到底有哪些内容?本文将做出详细的解读。 二、线性变换和逆变换 在本节中,我们研…

SQL 基础 | AS 的用法介绍

SQL(Structured Query Language)是一种用于管理和操作数据库的标准编程语言。 在SQL中,AS关键字有几种不同的用法,主要用于重命名表、列或者查询结果。 以下是AS的一些常见用法: 重命名列:在SELECT语句中&a…

AI图书推荐:用ChatGPT快速创建在线课程

您是否是您领域的专家,拥有丰富的知识和技能可以分享?您是否曾想过创建一个在线课程,但被这个过程吓倒了?那么,是时候把这些担忧放在一边,迈出这一步了!有了这本指南和ChatGPT的帮助&#xff0c…

python学习笔记B-16:序列结构之字典--字典的遍历与访问

下面是字典的访问和遍历方法: d {10:"hello",20:"python",30:"world"} print(d[10],"--",d[20],"--",d[30]) print(d.get(10)) print("以上两种访问方式的区别是,d[key]若键是空值&#xff0c…

SMB 协议详解之-TreeID原理和SMB数据包分析技巧

在前面分析SMB协议数据包的过程中,这里,可以看到在SMB协议中存在很多的ID,即Unique Identifiers。那么这些ID表示什么含义?在实际分析数据包的过程中如何根据这些ID进行过滤分析?本文将介绍SMB/SMB2中的tree id ,并介绍如何通过tree id 快速的分析SMB数据包中各种命令交互…

抖音评论区精准获客自动化获客释放双手

挺好用的,评论区自动化快速获客,如果手动点引流涨,那就很耗费时间了,不是吗? 网盘自动获取 链接:https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码:0b8x

【跟马少平老师学AI】-【神经网络是怎么实现的】(四)卷积神经网络

一句话归纳: 1)用1个小粒度的模式,逐个与图像的局部区域进行运算,运算结果反映模式与区域的匹配程度。 2)卷积神经网络与全连接神经网络的区别: 卷积神经网络的输出只与局部输入有连接。参数较少&#xff0…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面?新建子模块界面! 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务,并且使用的技术栈也相当丰富,但是目前只提…

优质短视频内容进阶SOP课

本课程致力于提升短视频内容创作标准化操作流程(SOP)。学员将学习视频策划、拍摄技巧、剪辑方法等,打造高质量短视频内容。通过实例分析和实践演练,学员将掌握优质内容制作的关键步骤,提升影响力和吸引力,成…

Linux搭建mysql环境

搭建 MySQL 环境 1、使用 wget 下载安装包,下载到 opt 目录中 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2、安装 MySQL 公钥 rpm -i mysql57-community-release-el7-10.noarch.rpmrpm --import https://repo.mysql.com/RPM-GP…

ubuntu ros noetic 编译 ORB_SLAM2 过程记录

1. 连接 eigen库 sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen 2. opencvx 修改 CMakeList.txt 中的 find_package open cv版本 修改 include/orbExtracter.h 文件为&#xff1a; //#include <opencv2/opencv.hpp> #include<opencv2/imgproc/imgpro…

Vite proxy-rewrite 属性详解

在前端开发中&#xff0c;为了避免跨域问题&#xff0c;我们会在vite.config.ts 中配置如下问题 rewrite: 由于不了解Nginx的知识&#xff0c;这个属性一直困扰着我&#xff0c;这个重写有啥用&#xff0c;加和不加有啥影响 server: {host: 0.0.0.0,proxy: {/api: {target: ht…