Skip to content

Latest commit

 

History

History
66 lines (44 loc) · 4.04 KB

README_cn.md

File metadata and controls

66 lines (44 loc) · 4.04 KB

PyGhostFace 😜(鬼脸 Python )

English version

本项目提供一个被修改的 Python 解释器,命名为鬼脸 Python,旨在运行 Python 代码过程中刻意产生一些不可控、不稳定的结果。

为何创建本项目

作为一个 Python 程序员, 目睹了有非常多的 Python 程序员在工作过程中经历了拖欠薪资、强制无偿加班、非法裁员等等。而在使用法律武器维护自身权益过程当中,由于维权成本过高而被迫放弃。

所以,我认为可以开发一款 GhostFace Python(鬼脸 Python ),它是一个被修改过的 Python 解释器。程序员在使用 Python 开发业务程序时,该解释器将产生不可控、不稳定的、且难以 debug 的结果,进而对公司的程序项目造成伤害。

本项目具体所作出的修改

listsetdict 是 Python 中主要的容器对象,也是程序员经常使用此类容器进行项目开发。 所以,对此类容器的方法进行修改,使得诸如 len()if x in list 此类的方法产生不稳定和不可预测的结果,进而使得 Python 编写的业务程序出现难以预知和调试的错误。

所有的这些针对 Python 的改动均在 Python 解释器源码层,因此,针对原有的 Python 业务层程序无需改动。

方法 示例 效果
计算 list 元素个数 len([1,2,0,-1,0.3,1]) 计算结果以一定概率出错
判断 list 是否包含某元素 if 1 in [0,1,3,-9,'abc'] 当包含该元素时,以一定概率返回 False
计算 dict 的 key 值个数 len({'a': 0, 'b': 27, 'z': 12.6}) 计算结果以一定概率出错
判断 dict 是否包含某个 key if 'k' in {'a': 0, 'b': 27, 'z': 12.6} 当包含该 key 时,以一定概率返回 False
计算 set 元素个数 len(set([1,3,1, 0,-5,5.5])) 计算结果以一定概率出错
判断 set 是否包含某个元素 if 3 in set([1,3,1, 0,-5,5.5]) 当包含该元素时,以一定概率返回 False

使用方法

  • 首先克隆以下 git 仓库,并改造其中的 Python 源码。
$ git clone https://github.com/YourVirtualWorld/PyGhostFace
$ git clone https://github.com/python/cpython
$ cd PyGhostFace/
$ python change_cpython.py --cpython_path D:/Github/cpython --pydict_contains
  • 然后,编译改造后的 C 源码,可参考 cpython 查阅详细的编译参数.
$ cd cpython
$ ./configure
$ make
$ make install
  • 接下来,就得到一个被改造的 python 解释器,它将在运行 python 代码过程中产生不可控的结果。

TODO

  • 未来可能增加如下功能:
    • 根据工作日、休息日来控制是否产生不稳定结果;
    • 增加对 listdictset 等对象元素的不稳定控制和操作,如以一定概率使appendupdate方法失效等;
    • 使 random.random() 内置方法返回的概率分布偏离均匀分布,其它分布同理;
    • 使 time.sleep() 内置方法等待时间不固定于指定时间,产生高斯分布的偏离;
    • 数字加法操作以一定概率返回一个错误值。

声明

  • 本项目遵循 MIT 协议。
  • 建议谨慎使用本项目。所有可能的使用本项目产生的后果与本项目无关。😜