开源许可证

开源许可证-定义、类型和比较 但是,如果 MPL 代码保存在单独的文件中,没有任何修改,派生工作可以与非 MPL 代码结合起来创建一个更大的工作,只有 MPL 部分的代码必须与软件一起发布。这个许可协议是由那些只是想让他们的软件公开可用的人选择的,他们不需要制定任何关于如何使用它的规则,但是出于法律原因必须包含一个许可协议。有这么多类型的开放源码许可证,而且几乎都是以不那么容易理解的方式编写的,因此选择正确的许可证可能是一件棘手的事情。许可证,比如 MIT 许可证和 BSD 许可证,对软件的使用、修改和发布施加了最小的限制。 阅读详情

目录

一、常见的开源许可证

Apache许可证

BSD许可证

MIT许可证

Mozilla Public License(MPL)许可证

GPL许可证

LGPL许可证

二、区别

(1)BSD和MIT


一、常见的开源许可证

  • Apache许可证

允许在商业、开源、个人项目使用、修改源代码

  • BSD许可证

允许在商业、开源、个人项目使用、修改源代码

  • MIT许可证

允许在商业、开源、个人项目中使用、修改源代码

  • Mozilla Public License(MPL)许可证

允许在商业、开源、个人项目中使用、修改源代码;

二次开发的代码必须开源

  • GPL许可证

允许在商业、开源、个人项目使用、修改源代码;

二次开发的代码必须开源

  • LGPL许可证

允许在商业、开源、个人项目使用、修改源代码;

二次开发的代码采用动态链接调用该许可证的库,可以不用开源。否则必须开源

二、区别

(1)BSD和MIT

BSD不能用开源项目打广告,比如宣传麒麟系统时说自己是ubuntu的加强版;

mit可以

1-1 开源许可证GPL, BSD, MIT, Mozilla, Apache, LGPL的介绍 开源许可证(Open source licenses),广义来讲是指一种被用于计算机软件或其他产品的,允许在指定的条款内使用,修改或分发其源代码,蓝图或设计的许可证。一般来讲,我们说的开源许可证是指广义的开源许可证释义。狭义的来讲,根据 OSI(Open Source Initiative,开放源代码倡议组织) 的解释,开源许可证是指那些符合 OSD(开源定义,Open Source Definition) 的许可证 —— 简单来说,这些许可证允许软件被自由的使用,修改和分发。 阅读详情

相关推荐

【开源合规】开源许可证风险场景详细解读

接上篇文章所讲,使用开源组件,忽略开源许可证问题是存在合规风险的,但是关于什么场景下真实存在风险,以及什么样的风险?很多文章也没有讲的很明白,这些内容大部分都隐藏在晦涩难懂的许可证原文里面。通过一段时间的接触,包括收集资料、翻译许可证原文等学习,特此整理了一部分……

今天是几号的博客 3791

浅谈 开源许可证

浅谈 开源许可证

鱼竿钓鱼干 5004

开源许可证检测工具Open Source License Checker实战解析

本节将分别介绍 GPL、MIT、Apache 2.0 和 BSD 四种主流开源许可证的核心特征,包括其授权范围、适用场景以及在社区和企业中的接受度。开源许可证本质上是一种授权协议,由开源项目维护者发布,授权用户在特定条件下使用、修改和再发布软件。虽然它们不是法律条文,但在多数国家的司法体系中,特别是美国、欧盟和中国,这些许可协议被视作具有法律约束力的合同。以 GPL 许可证为例,其要求任何衍生作品也必须以相同的 GPL 协议发布。

weixin_42509720的博客 1587

开源软件 | 一文彻底搞懂许可证的定义、起源、分类及八大主流许可证,让你选型不再头疼

开源许可证是一种法律协议,它规定了软件代码可以被如何使用、修改和分发。其中,著作权是指对于软件代码的创作者所拥有的法律权利,包括复制、发布、演绎等权利。分发是指分发指软件作者向他人提供软件源代码或二进制代码或二者的副本。著作权法默认禁止共享,没有许可证的软件就不能免费地使用、修改、共享。在开源许可证中,通常会涉及到著作权许可授权的问题。这些许可协议可以分为两大类:强制性许可证和非强制性许可证。强制性许可证要求使用该软件的用户必须遵守特定的协议,否则将面临诉讼风险。

所有成功的背后,都是痛苦的坚持,所有的痛苦,都是傻瓜般的不放弃! 8310

163种中草药图像数据集构建与ResNet-50迁移学习实战指南

在计算机视觉领域,高质量标注数据集是模型训练的基石,直接影响图像分类、目标检测等任务的性能。其核心原理在于为算法提供结构化的监督信号,通过深度学习模型学习从像素到语义的映射关系。构建此类数据集的技术价值在于解决了特定垂直领域(如中医药)数据稀缺的痛点,为AI技术落地提供了关键“燃料”。在应用场景上,标准化数据集广泛支撑着教学演示、算法验证和产业应用开发。本文聚焦于中草药识别这一细分领域,详细介绍了一个包含163种常见药材、经过多源聚合与清洗的图像数据集构建全过程,并提供了基于PyTorch和ResNet-5

weixin_33672400的博客 455

Halcon Camera-calibration 相关算子(一)

Halcon Camera-calibration 相关算子介绍

qq_44744164的博客 1366

开源许可证(Open Source Licenses)

开源许可证(OpenSourceLicenses)是一种允许用户查看、修改、共享和分发代码的法律协议。它们规定了代码在不同场景下的使用权限和责任。开源许可证的种类很多,不同的许可证在使用条件上有所不同。

不断debug,优化中…… 2843

FPGA资料分享——FPGA开发板入手指南

FPGA学习,开发板怎么选,看这里,就一个通透

weixin_51627076的博客 7297

开源项目法律与许可证完全指南:基于 opensource.guide 的 License、CLA 与合规实战

Open Source Guides(opensource.guide)是由 GitHub 联合社区维护的开源项目运营指南集,其中《The Legal Side of Open Source》一文系统回答了开源创作者最常遇到的法律问题:默认版权机制、公开仓库与开源许可证的区别、permissive/copyleft 许可证的选择逻辑、许可证变更的可行性,以及 CLA(贡献者许可协议)、专利、商标和

gitblog_00040的博客 505

晟矽微MC32F7361定时器的使用案例说明

110所以TIMER0所用的频率是FCPU的1/64,也就是8/64MHZ. 为1/8MHZ。//io口下拉电阻 1:enable 0:disablea。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。

liyanfei123456的博客 1130

实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?

化学结构识别(CSR)工具的核心任务是将分子结构图像转换为SMILES(Simplified Molecular Input Line Entry System)表示。这一过程需要克服图像质量差异、绘制风格变化以及特殊基团识别等挑战。三款工具采用不同的技术路线:DECIMER:基于EfficientNetV2+Transformer架构,优势在于处理标准期刊文献中的分子图示Img2Mol。

weixin_32576389的博客 346

开源许可证与法律合规实战:opensource.guide 法律篇全解读

开源项目的法律问题(许可证选择、贡献者协议、版权归属)是许多开发者"知道重要却懒得深究"的领域。本文以开源指南仓库 opensource.guide 的法律篇([英文原版](https://link.gitcode.com/i/27a3210a0186e07c38a1723bc9932747) 及多语言译本,如 [印地语版](https://link.gitcode.com/i/128f59066

gitblog_00285的博客 15

金融机构和贷款产品数据抓取:使用Python爬虫技术获取金融机构的贷款产品信息与条件

本文介绍了如何使用Python爬虫技术抓取金融机构的贷款产品信息,包括静态网页抓取和动态网页抓取两种方法。通过requestsSelenium等工具,我们能够轻松抓取银行和消费金融平台上的贷款信息,并存储和分析数据。随着技术的发展,我们还可以扩展爬虫功能,抓取更多的金融机构网站,或者结合自然语言处理技术对贷款产品的评论进行情感分析,为用户提供更多维度的贷款决策支持。

2201_76125261的博客 1733

快速看懂开源许可证(Open Source License)

开源软件和免费不一一对应,因此不受限制地随意使用是不对的。在开源诞生之初,自由软件是当时的主流提法,回顾开源的发展史,从自由软件到开源运动实现了非常大的跨越,前者更多的是一种精神的倡导,而后者着眼于软件的协同开放,因此会有非常严谨的开源许可证的规则和限制。开源软件能走到今天的发展程度,就是因为有了这么一套遵从开源精神的规则体系,才能够健康发展。开源精神的载体之一就是开源许可证。本文介绍了开源许可证的前世今生,并通过一张图快速区分常用开源许可证。

yushuoqi的博客 1万+

使用 MATLAB/Simulink + Deep Learning Toolbox,构建一个基于LSTM的电网负荷预测模

本文介绍了一个基于Simulink和深度学习的智能电网负荷预测与调度建模方法。通过LSTM神经网络构建负荷预测模型,将历史负荷、天气、日期等特征作为输入,预测未来24小时负荷。然后将训练好的模型集成到Simulink仿真系统中,结合发电单元模型和经济调度逻辑,实现预测驱动的电力调度优化。实验结果表明,该方法预测误差在2.5%-4.0%之间,相比传统调度方式可降低15%-25%的运行成本。文章详细展示了从数据准备、特征工程、模型训练到系统集成的完整流程,为智能电网中AI技术的应用提供了实用参考。

amy_mhd的博客 171

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7211

开源许可证(Open Source License)详解

原文: https://www.jianshu.com/p/411dd51c4236 由宽松到严紧排序,常用的开源许可证有: MIT许可证 BSD许可证 Apache许可证 LGPL许可证 GPL许可证 MIT、BSD 许可证都源自大学,体现了简单、开放和包容的特点。 MIT、BSD、Apache 三者都支持闭源的后续开发。 GPL、LGPL 传染性开源,编译的代码里用了这里的代码,都必须开源。 其它License,最好都在产品上说明使用了,署名保留原作者就ok。 MIT许可证 来源于

_ 7532

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

开源项目启动完全指南:从许可证、README 到发布检查清单(基于 opensource.guide 实战拆解)

这篇指南以 opensource.guide 仓库的《启动一个开源项目》一文为骨架,系统讲解"为什么开源、何时开源、如何开源"的完整链路:从明确开源动机与目标,到为项目补齐许可证、README、贡献指南、行为准则四大基础文档,再到命名品牌策略与发布前的 12 项检查清单。读完你将获得一套可直接照做的开源项目启动流程,并能在本仓库根目录找到每一步的真实落地范例。 ## 开源的"是什么"与"为什么"

gitblog_00803的博客 457

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

開源的法律保障:opensource.guide 開源授權、許可證選擇與企業合規實戰指南

本指南以 Open Source Guides(opensource.guide)專案中的《開源的法律保障》([legal.md](https://link.gitcode.com/i/f19750e66ec60bccd2550af3f8d382c0))為核心骨架,完整梳理開源專案從「默認專有版權」到「明確授權」的法律邏輯,講解公開倉庫與開源許可證的區別、MIT/Apache 2.0/GPLv3

gitblog_01028的博客 847

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

opensource.guide 开源法律实战指南:从许可证选择到企业合规

开源项目的法律问题并不神秘,但默认的法律状态往往与人们的直觉相反:**版权默认是独占的**,公开代码并不等于授权使用,依赖的许可证也随时可能"反向约束"你的项目。本指南以 opensource.guide 项目中的《Prawna strona Open Source》(开源的法律层面)一文为核心骨架,结合本仓库的实际许可实践(仓库自身即以 CC-BY-4.0 发布,详见 [LICENSE](htt

gitblog_00202的博客 279

Open Source Guides 开源项目法律实务指南:许可证选择、CLA 与公司合规全解

开源项目在享受"共享与协作"的自由之前,首先必须面对一套完整且严肃的法律规则:版权、许可证、贡献者协议(CLA)、专利与商标。本篇技术指南以 Open Source Guides 官方《开源的法律层面》为核心骨架,系统讲解开源项目从"选择许可证"到"变更许可证"、从"是否引入 CLA"到"公司法律团队介入"的完整决策链路,并辅以本仓库(GitHub 加速计划 / op / opensource.g

gitblog_00727的博客 848

opensource.guide 实战指南:如何启动你的第一个开源项目——从许可证、README 到发布检查清单

本篇指南基于开源仓库 opensource.guide(GitHub 官方维护的"开源指南"集合,本仓库即其多语言镜像)中的《Starting an Open Source Project》一文(韩文版见 [_articles/ko/starting-a-project.md](https://link.gitcode.com/i/2025127b704a1284adc67e43cecc466d)

gitblog_00234的博客 997

开源项目的法律合规实战指南:许可证选择、贡献者协议与公司法务协作(基于 opensource.guide 官方指南)

> 本指南以 opensource.guide 的意大利语版法律专题文章([_articles/it/legal.md](https://link.gitcode.com/i/a538884afe728d0b9447bb7da1f0ff06))为主体骨架,结合本仓库自身的许可证实践([LICENSE](https://link.gitcode.com/i/f9e941f59ccee97a32e50

gitblog_01176的博客 138

开源项目法律合规实战指南:许可协议选型、许可证变更与贡献者协议(opensource.guide 深度解析)

> 本文以 opensource.guide 仓库中的 [匈牙利语法律指南](https://link.gitcode.com/i/f8a59d33a176d02513fd67f749913313)(及其 [英文原版](https://link.gitcode.com/i/fb3788d2a614249de09ac060848f847b))为骨架,系统讲解开源项目的版权默认规则、许可证选型逻辑、许

gitblog_00303的博客 658

开源项目法律合规实战指南:以 opensource.guide 为例详解许可证选择、变更与公司治理

开源项目的法律风险往往被开发者忽视:默认版权、依赖许可证兼容性、员工贡献归属、商标与专利冲突……每一项都可能在不经意间让项目陷入纠纷。本指南以 opensource.guide 仓库中的《The Legal Side of Open Source》文档为核心,系统讲解为什么开源必须有许可证、如何为自己的项目挑选与变更许可证、何时需要贡献者协议,以及公司法律团队应当掌握的关键事项,帮助你为项目建立可

gitblog_01038的博客 23

opensource.guide 开源法律指南:许可证选择、版权归属与合规实战全解析

开源不只是把代码公开,更是一套建立在版权法之上的授权机制。在 opensource.guide 这份社区指南中,法律篇(`_articles/ms/legal.md`,英文源文为 `_articles/legal.md`)系统回答了开源创作者最常见的法律困惑:为什么代码默认受版权保护、公开仓库为什么不等于开源、如何挑选许可证、如何更换许可证、是否需要 CLA、公司法务团队该关注什么。读完本文,你将

gitblog_01055的博客 280
上一篇: 网络通信协议-TCP协议
下一篇: 汽车品牌和型号的简单认识
「已注销」
博客等级 码龄10年 19粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值