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

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

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 框架及其组件,需要遵守以下几个关键要点:

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


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


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


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


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

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

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

3.1 风险

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


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


法律和许可问题:虽然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 强大的功能,同时也符合开源社区的规范和精神。

目录
相关文章
|
2月前
|
搜索推荐
Flutter 中的 AnimationController 类
【10月更文挑战第18天】深入了解了 Flutter 中的 `AnimationController`类。它是构建精彩动画效果的重要基石,掌握它的使用方法对于开发具有吸引力的 Flutter 应用至关重要。
|
4月前
|
Dart
Flutter笔记:手动配置VSCode中Dart代码自动格式化
Flutter笔记:手动配置VSCode中Dart代码自动格式化
501 5
|
4月前
|
存储 开发者 UED
Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了
Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了
83 4
|
4月前
|
开发者 Windows
Flutter笔记:Widgets Easier组件库(9)使用弹窗
Flutter笔记:Widgets Easier组件库(9)使用弹窗
113 3
|
4月前
|
数据安全/隐私保护 Android开发 开发者
Flutter笔记:Widgets Easier组件库-使用隐私守卫
Flutter笔记:Widgets Easier组件库-使用隐私守卫
51 2
|
4月前
|
UED 开发者
Flutter笔记:Widgets Easier组件库(13)- 使用底部弹窗
Flutter笔记:Widgets Easier组件库(13)- 使用底部弹窗
63 2
|
4月前
|
开发者
Flutter笔记:Widgets Easier组件库(5)使用加减器
Flutter笔记:Widgets Easier组件库(5)使用加减器
98 2
|
4月前
|
开发者 容器
Flutter笔记:Widgets Easier组件库(4)使用按钮组
Flutter笔记:Widgets Easier组件库(4)使用按钮组
34 2
|
4月前
|
开发者 容器
Flutter笔记:Widgets Easier组件库(3)使用按钮组件
Flutter笔记:Widgets Easier组件库(3)使用按钮组件
48 2
|
4月前
|
数据采集 API 调度
Flutter笔记:关于SchedulerBinding
Flutter笔记:关于SchedulerBinding
87 1