跳至内容

Krita 项目 25 周年回顾

上一篇文章 | 2024年 五月 31 日 星期五 | 阅读所需时间: 10 分钟 | 下一篇文章

不知不觉间,Krita 项目已经走过了 25 年,四分之一个世纪的时光。诚然,它当初并不叫 Krita,而是 KImageShop。由于遭到了某位德国讼棍的法律骚扰 (谢天谢地,他已经去了另一个世界) 而不得不改名为 Krayon,然后又因为类似的原因才最终改名为 Krita。

我在 2003 年加入了 Krita 项目,当时 Krita 还是 KDE 的办公套件 KOffice (后来改名为 Calligra) 的一个组件。2004 年,我从 Patrick Julien 手中接棒,成为了 Krita 项目的维护者。我陪伴 Krita 走过了项目的 25 年中的 20 多年,它在我的人生中占据了非常重要的位置,这也让我在谈及 Krita 时很难不带有强烈的个人情感。

现在让我们把时间拨回到 1998 年,那时候我还在寻找一款好用的自由开源绘画程序。在那个年代,人们对 Linux 的热情空前高涨,许多应用程序项目被开发出来以充实 Linux 的生态,其中就包括了 GIMP 和 Qt。GIMP 是一款数字图像处理应用,而 Qt 则是一套用于开发具备友好用户界面的 C++ 程序工具集。GIMP 并不是基于 Qt 开发的,它最初使用的是非开源的 Motif 工具集,当时则已经转为使用自研工具集。一位 Qt 爱好者 Matthias Ettrich 实验性地将 GIMP 移植到了 Qt,并在 1998 年的 Linux Kongress 上进行了演示。然而这却激起了 GIMP 社区不甚友善的回应——开源社区之间常见的竞争关系,加上当年血气方刚的头脑,让大家最终不欢而散。而这件事也成为了 Krita 项目萌生的种子。

既然别人不想跟我们一起干,那我们就自己干吧。经过了几次光说不练的立项之后,最终在 1999 年 5 月,Matthias Elter 和 Michael Koch 正式启动了 KImageShop 项目。您可以阅读下面的邮件列表消息,对比一下我们遵循了哪些原始设计思路,又在哪里发生了偏离。例如它开篇就表示 KImageShop 要基于 KOM 开发,而 KOM 是一款类 Corbra 程序。您大概从未听说过 Corbra——因为它实在不是一个好主意,我们没有死守这个设计思路实在是谢天谢地。

|KImageShop 第一封邮件列表消息的截图

于是 KImageShop 的开发就这样开始了。如今的 Krita 源代码中还残留着一些当年的原始代码,这真令人难以置信——尽管大部分代码只剩下了括号是跟当初一样的了。

不过开发工作在不久后很快就陷入了停滞。这也不难理解,开发一款正经的图像处理应用程序并不是一件可以一蹴而就的事情。KImageShop 的开发工作在三天打鱼两天晒网的状态下蹒跚前行。它的维护者换了一位又一位,他们以努力和才干为项目打造了一个可靠的、高性能的代码基础。时间来到 2003 年,正在寻找开源数字绘画软件项目加入的我发现了 KImageShop。那时候我并不懂 C++ 编程,不过我倒是撰写过第一本关于 Python 和 Qt 联合编程的书籍,所以也可以说是专业对口吧。

Krita 当时已经被重写到连绘画工具都没掉了。我加入后的第一件事自然就是要把它给重写出来。这可不是一件简单的差事。

|Krita 笔刷引擎的最初尝试

通过开诚布公地表示项目遇到了困难,我们得到了志同道合者的注意,越来越多的贡献者开始加入到开发工作中来。到了 2004 年,我们已经具备了一支小规模的,充满热情的小团队。这一年项目得到了许多改进:Camilla Boemann 重写了 Krita 的核心代码以实现图层的自动大小调整;Adrian Page 编写了基于 OpenGL 的后端程序;Cyrille Berger 编写了插件和脚本编程的最初代码。不过这些都是技术层面的改进,我们并没有为此发布新版的软件。

2005 年,Krita 终于发布了第一个正式版,这时的它还只是 KOffice 1.4 的一个组件。虽然距离成熟还有很长的距离要走,但人们似乎感觉到了它的未来可期,而一些 Linux 杂志也为 Krita 给出了好评——2005 年时 Linux 题材居然能有纸媒,而且还不是一本,这在今天简直是不可想象的事情。

|Krita 1.4 的截图

时间来到了 2006 年,Krita 1.5 正式发布,带来了 CMYK 色彩管理。Krita 1.5 还具备真正的水彩图层混色功能——尽管这个功能过于复杂,最终因为难以维护而很快被移除了。我们在同一年又发布了 Krita 1.6:Linux Journal 杂志对这一版软件给出了 “顶尖级别” 的评价。我们当时也颇为自鸣得意,觉得软件已经颇为成熟了,然而使用它的画师却告诉我们软件还有很多方面尚存在欠缺。

紧接着我们就遇到了大麻烦。当时 Qt 4 已经发布,Krita 使用的 Qt 3 也来到了它生命周期的终点。我们在移植到 Qt 4 的过程中做出了一个错误的决定,重写了大量的 1.x 版代码来实现 Krita 与其他 KOffice 应用程序之间的组件共享。这次移植工作从 2007 年一路拖到了 2009 年,耗费了整整两年半的时间才基本完成。

在这段时间里,我们为了修复移植和重写引发的程序缺陷而疲于奔命。我们也进行了第一次开发筹款,购置了测试用的 Wacom 影拓 3 数位板和配套的美术笔,我至今还在使用它。

2009 年,我们发布了 Krita 2.0。这一版软件还不是很稳定,但我们总算拿出了点可以让用户测试的东西。同年我们又发布了 Krita 2.1。我们还首次赞助了开发者 Lukáš Tvrdý 为我们修复了大量的程序缺陷,他还接下来的时间里为我们改善了程序的笔刷性能。

随着 Krita 得到越来越多的认可,我们也收到了更多的反馈意见。2010 年,我们在荷兰代芬特尔召开了一次大型的开发冲刺活动,对于未来的用户需求和项目的发展方向进行了讨论:我们应该模仿 Photoshop、GIMP、Corel Painter,还是自成一派?我们应该主要服务于哪些用户开发 Krita?

这次讨论确立了 Krita 的服务对象是数码画师,软件应该要具备从零开始完成作品的能力,软件应该简单易用并富有创作乐趣,软件应该支持各种语言以服务来自不同文化背景的用户。这些愿景至今没有发生改变。

为了实现这个目标,我们开始了漫长的努力。2010 年我们发布了 Krita 2.2 和 Krita 2.3,我们当时认为 2.3 对画师来说已经能堪一用。到了 2012 年的 Krita 2.4 和 2.5 时,软件开始变得“好用”起来。David Revoy 是一位以 Krita 为主要工具的画师,我们当时也是主要以他的使用反馈作为参考来改进 Krita 的使用体验的——说我们在这段时间里所做的事情就是“尽量将 Krita 打造为让 David Revoy 也能够顺畅使用的状态”并不为过。我们在开发冲刺活动中也会观察画师们如何使用 Krita,现场听取他们的反馈,开发者们并不会对他们的使用做出任何指导,也不会对他们的批评做出反驳,从而提高调研的有效性。

与此同时,我还创立了Krita基金会,以便我们能够让筹款用于赞助全职开发人员。Krita 基金会赞助的第一位开发者是 Dmitry Kazakov,他现在仍然是 Krita 的主力开发者。

到这时为止,Krita 依然还是 KDE 的办公套件 KOffice 的一部分。然而因为 KOffice 团队的 KWord 组件的一位开发者引发的无休止的内讧,我们不得不与他分道扬镳,将 KOffice 项目更名为现在的 Calligra。我们在这些毫无意义的事情上浪费了大量原本可以用于开发的精力。更名为 Calligra 后,开发工作就变得更加顺畅了。就在这时,诺基亚为了自己的手机系统生态也开始加入 Calligra 的开发,对套件的所有应用程序都要依赖的中枢程序库进行了大量改进,Krita 也自然从中受益。只不过凡事都有两面性,为了支持多个不同性质的程序,这些程序库变得越来越复杂,维护它们也成为了巨大的负担,以至于现在 Krita 还在被其中的一些遗留问题所困扰。

在那之后又经过了几年。2013 年没有什么大事发生,我们发布了 Krita 2.6、2.7 版,进行了筹款活动,新增了许多功能,例如动画功能。又在英特尔的赞助下开发了专门为触摸屏和平板电脑优化的 Krita 版本 (英特尔一直与我们保持着良好的互动关系,是我们主要的企业赞助商)。我们在开发软件、听取反馈、欣赏 Krita 用户的作品中度过了一段美好的时光。

|Krita Sketch (触摸屏优化版) 的截图

我们在 2014 年将 Krita 移植到了 Windows 平台,这也是英特尔赞助开发触控屏和平板电脑版本 Krita 的开发任务之一。这一年发布的 Krita 2.9 也是一个不错的版本,我们在一年中为它更新了 11 个小版本。

也是在 2014 年,我们发起了第一次 Kickstarter 筹款活动。Kickstarter 在当时还是新鲜事物,人们对它的态度远比现在要积极。我们在这次筹款活动中得到了近 700 人的支持,其中最重要的目标就是要将 Krita 移植到 macOS。在那之后的几年里我们每年都会进行一次 Kickstarter 筹款活动,尽管劳累,但我们为此感到兴奋不已。而用户们也可以在筹款中投票选择自己想要的延伸目标。

|第一次 Kickstarter 筹款的页面截图

我当时还有一份正常工作,所以我都是在夜里、周末,甚至在通勤的列车上完成 Krita 的开发工作的。

我们也开始着手将 Krita 从 Qt 4 移植到 Qt 5。尽管这次移植没有从 Qt 3 移植到 Qt 4 时那么狼狈,但结果也并不完美——尽管我们付出了大量费用和时间,却始终无法成功通过 Qt 5 的触控程序库来集成之前的基于 OpenGL 的画布引擎,我们不得不为此放弃了触摸屏/平板电脑版本的 Krita。

福无双至,祸不单行——接下来的一年坏事接踵而至:我先是不慎摔断了肩骨,然后又失去了在 Blue Systems 的正式工作。这样一来我不再可以像以前一样免费为 Krita 工作,而是需要依赖 Krita 基金会的赞助才能生活了。幸亏我们为 Krita 的 Qt 5 移植工作找到了一个赞助商,于是 Qt 5 移植工作便成为了我的首个受赞助的 Krita 工程。

2016 年,我们发布了 Krita 3.0,这一版 Krita 实现了动画支持。由于我们在这一版不但要移植到 Qt 5,还要重新大量程序,因此与 2.9 相比,3.0 的整体品质要稍逊一筹。这次我们先是完成了移植,然后才进行的重写,从而避免了上次移植时的混乱。

|动画功能 Kickstarter 筹款演示

我们还印刷了至今唯一一本使用 Krita 绘制的画作的作品集。这本作品集耗费了我不少心力,也消耗了基金会的大量资金。

|Krita 2016 画册

接下来我们在 Krita 3.0 的基础上继续发布小版本更新。经过 2016 年、2017 年、2018 年的三年漫长的开发时间,我们终于发布了 Krita 4.0,基本实现了在 Kickstarter 筹款活动中许诺的功能。但是在 2017 年我们也遭遇了一次税务危机:荷兰税务局要求我们为 Dmitry 的工作支付的赞助费用缴纳好几万欧元的增值税。从那时起我们被迫雇佣了一位正经的会计师,不再敢像以前那样盲目相信代芬特尔当地的小型企业管理办事服务机构。

不得已,我们只好就此困境 公开求援。让我们高兴的是,我们得到了来自世界各地的捐款支持,另外还有熟人为我们提供了大笔捐款,最终填平了这个大窟窿。

为了避免这种事情再次发生,我将所有 Krita 的商业活动集中在一个单人名义的公司下面进行管理。同年 Krita 上架了 Microsoft Store,这是我们上架的第二个软件商店。在此之前我们已在 2014 年上架了 Steam。此后我们陆续上架了 Epic 商城、Google Play,直到最近还上架了苹果 macOS 应用商店。分离商业活动管理也因此发挥了巨大的作用。

接下来我们在 2018 年发布了 Krita 4.1,在 2019 发布了 Krita 4.2,在 2020 年又发布了 Krita 4.3 和 4.4。这些年份没有发生太多值得一提的事情。我们闷头搞开发,用户数量逐年提升,软件的知名度也越来越高。我们赞助了更多的开发者加入团队,让 Krita 软件得到了长足的进步。

Krita 很早就在 YouTube 上开设了官方频道,但没人有时间管理它,导致内容空缺。从 2019 年开始,我们邀请了 Ramon Miranda 为我们的频道定期制作视频 (需要科学上网):

到现在,Krita 的官方 Youtube 频道已经累积了大量的各种教程,为用户传授从数字绘画基础技术到创建笔刷等高级技术。

然而时间到了 2020 年,我们却遭遇了新冠疫情。随着各国陆续实施管控措施,我们在好几年里都无法开展开发冲刺活动。缺少了面对面的交流,开发的效率也就大打折扣。开发团队的成员一个接一个病倒,有的还病得非常严重——但谢天谢地我们都活下来了。不过我的工作能力也因为长新冠而受到了严重的影响,有些时候我被迫整天躺在一个阴暗的房间里,难受得无法动弹。

到了 2021 年,Qt 6 已经在地平线上出现,但我们当时还没有迫切的需要将 Krita 移植到 Qt 6。我们将矢量图层从 ODG 转为使用 SVG,这是一个在文件格式上重大变更,导致 4.x 和之前的 Krita 图像无法与 5.x 的兼容。我们接下来在 2022 年发布了 Krita 5.1,又在 2023 年发布了 Krita 5.2。

我们预想 Krita 5.3 将会成为下一个较为好用的版本。

不过在那之后我们将不得不直面移植到 Qt 6 的挑战。这次移植也注定不会一帆风顺,因为 Qt 6 带来的许多更改将让我们不得不重新开发、调整 Krita 的一些核心功能的代码。

以上就是 Krita 项目在过去的 25 年间发生的大事了。通过回顾这场漫长的旅途,让撰写本文的我仿佛经历了一场峰回路转的奇幻大冒险。希望在接下来的日子里,Krita 项目能够继续勇往直前,与所有使用它的画师们一道,探寻比远山更远的新天地。


请加入成为 Krita 开发基金成员,为我们提供每月捐款。您也可以为我们提供 单次捐款

捐款给 Krita